Overlay表面上的按钮怎么更新状态?InvalidateRect还是重新画过?我的怎么不行呢?

xqhrs232 2012-06-19 09:42:33
Overlay表面上的按钮怎么更新状态?InvalidateRect还是重新画过?我的怎么不行呢?
...全文
202 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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这块还是有问题?

19,518

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧