社区
嵌入开发(WinCE)
帖子详情
Overlay表面上的按钮怎么更新状态?InvalidateRect还是重新画过?我的怎么不行呢?
xqhrs232
2012-06-19 09:42:33
Overlay表面上的按钮怎么更新状态?InvalidateRect还是重新画过?我的怎么不行呢?
...全文
235
12
打赏
收藏
Overlay表面上的按钮怎么更新状态?InvalidateRect还是重新画过?我的怎么不行呢?
Overlay表面上的按钮怎么更新状态?InvalidateRect还是重新画过?我的怎么不行呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xqhrs232
2012-06-21
打赏
举报
回复
(但亲自做实验不是这样的结果----PC上的WIN32程序先产生WM_ERASEBKGND消息,并且产生2次,WINCE上的WIN32程序才是先产生WM_PAINT消息,WM_ERASEBKGND消息也只产生1次,怎么会有这样的区别,还真是困惑了,PC跟WINCE在这个上有这样的区别?不可能吧!?但运行跑起来后用InvalidateRect函数来做实验整个逻辑又是WM_PAINT消息先产生,WM_ERASEBKGND消息后产生,WM_ERASEBKGND消息先被响应执行完,PC环境下对消息的捕捉不准,因为还有其它程序/系统运行的存在,比如程序最后响应的是WM_ERASEBKGND消息,但程序并没有显示WM_ERASEBKGND消息中的背景,而是WM_PAINT消息中的背景)
xqhrs232
2012-06-21
打赏
举报
回复
(但亲自做实验不是这样的结果----PC上的WIN32程序先产生WM_ERASEBKGND消息,并且产生2次,WINCE上的WIN32程序才是先产生WM_PAINT消息,WM_ERASEBKGND消息也只产生1次,怎么会有这样的区别,还真是困惑了,PC跟WINCE在这个上有这样的区别?不可能吧!?但运行跑起来后用InvalidateRect函数来做实验整个逻辑又是WM_PAINT消息先产生,WM_ERASEBKGND消息后产生,WM_ERASEBKGND消息先被响应执行完,PC环境下对消息的捕捉不准,因为还有其它程序/系统运行的存在,比如程序最后响应的是WM_ERASEBKGND消息,但程序并没有显示WM_ERASEBKGND消息中的背景,而是WM_PAINT消息中的背景)
91program
2012-06-20
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
MTK3360+WINCE6。0
可能我的程序逻辑存在问题。
[/Quote]
MTK 的平台我没有用过,看其他人的回复吧。
xqhrs232
2012-06-20
打赏
举报
回复
MTK3360+WINCE6。0
可能我的程序逻辑存在问题。
91program
2012-06-20
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
动不动整个OVERLAY就显示不出来(显示与隐藏来回切换几次),好怪!难道真的是我平台上的OVERLAY驱动有问题?!
[/Quote]
你是啥平台?
xqhrs232
2012-06-20
打赏
举报
回复
还是程序的问题,每次都是直接去获取surface表面的DC然后就直接把IIMAGE接口的PNG图片DRAW过去,应该是没对surface表面的DC进行清零或者初始化操作。(surface表面的DC也就是一片内存,直接DRAW新的图片过去老的图片还是存在的,所以没有把按钮的对应状态显示出来)
好的解决方法是用用双缓冲技术,在后台把背景及按钮图片一个个bitblt好,然后贴到surface表面的DC上然后再调UpdateOverlay去重新显示就可以了。
下一步就看看为什么会闪烁了,还有时候OVERLAY表面消失显示不出来。可能还是程序逻辑的问题!!!
91program
2012-06-19
打赏
举报
回复
好像没有什么特殊的逻辑,只有获取 overlay 的 DC 后,操作与普通 DC 是一样的。
xqhrs232
2012-06-19
打赏
举报
回复
对主表面加AddOverlayDirtyRect不行,对OVERLAY表面加AddOverlayDirtyRect也不行。
不知道OVERLAY表面的更新应该是个怎么的逻辑。只能重绘,还是InvalidateRect?如果InvalidateRect这个对应的区域应该是那个呢?是针对主表面上还是OVERLAY表面上?
xqhrs232
2012-06-19
打赏
举报
回复
动不动整个OVERLAY就显示不出来(显示与隐藏来回切换几次),好怪!难道真的是我平台上的OVERLAY驱动有问题?!
xqhrs232
2012-06-19
打赏
举报
回复
原来是按钮的距形区域算错了,一直没点在按钮的区域内,导致按钮的标志没有被更新,所以没贴对应的新图标过去。
现在存在的问题就是按钮按下了弹起没有对应更新图标,但对应的标志已经是对的了,OVERLAY不支持整个重绘功能?我的已经先画背景图片了,但按钮在弹起的时候没有被更新,奇怪了。
xqhrs232
2012-06-19
打赏
举报
回复
用InvalidateRect对应区域只会闪一下,但没有更新状态图片。
重新画过又显示不出来,再调UpdateOverlay也还是显示不了。
难道必须参考MOSQUITO例子那样来一个前后surface的flip吗?
xqhrs232
2012-06-19
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
好像没有什么特殊的逻辑,只有获取 overlay 的 DC 后,操作与普通 DC 是一样的。
[/Quote]
获取overlay的DC后,然后把所有的图标一个个重新画过?然后调UpdateOverlay去重新显示?我的已经是这样做了,但还是显示按下的状态,按下的状态已经清除了,已经整个overlay重新画过了的啊!甚至连背景图标都重新画过了一遍,但为什么按钮还是恢复不了弹起的状态。
难道我的平台驱动在overlay这块还是有问题?
MFC中自定义CList
Ct
rl控件的完整功能实现与实战
看到这里你应该明白了:CList
Ct
rl远不止
表面
那么简单。它的强大之处在于灵活性与可控性的完美平衡。你可以用最简单的API快速搭出原型,也可以深入到底层实现媲美现代UI的效果。关键是理解它的运行机制——消息驱动、...
C# WinForm窗体抖动与鼠标点击失效问题解决方案实战源码
在传统的单缓冲模式下,所有的绘图操作都是直接作用于屏幕上的可视
表面
(即前台缓冲区)。每当需要
更新
画面时,系统会立即擦除旧内容并开始绘制新内容。然而,这个过程并不是瞬时完成的——尤其是当绘制逻辑复杂、...
基于MFC与OpenCV的指针式仪表识别系统设计与实现
理论上是对的,但现实中……很多老设备根本没有通信接口;不同厂家协议五花八门,整合成本太高;数字模块可能失灵,而机械指针永远在线;在防爆、高温等极端环境下,电子通信不可靠。于是,“拍照+AI分析”成了最...
Bandicam高清录屏软件实战指南
精确控制录制范围是提高...无论是仅录制某个应用程序窗口,还是锁定一段特定屏幕区域,Bandicam 提供了灵活的选区机制来满足多样化场景。其实现不仅涉及几何计算,还包括操作系统级别的窗口
状态
监控与动态调整逻辑。
Delphi VCLSkin5.6源码深度解析与实战应用
VCLSkin5.6 在绘制时往往只
更新
状态
变化的部分(如鼠标悬停区域),而非整个控件,显著提升了响应速度。 2.2 皮肤化技术的基本范式 要实现对 VCL 控件的外观定制,不能简单地修改颜色或字体,而必须深入到底层绘制...
嵌入开发(WinCE)
19,523
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章