有人耍过 WM_SYNCPAINT 吗?

underyun 2006-06-13 02:21:19
我的主窗口上有一个其他进程创建的窗口,即是另外一个UI线程。由于是不同线程,主窗口和子窗口之间不能得到windows刷新机制的支撑。请问有没有好的办法,子窗口有比较复杂的控件,每次刷新时不可全设为无效区。
我在MSDN上看到 WM_SYNCPAINT ,似乎有点眉目,但是相关资料太少,M$玩深沉惜字如金,不得甚解,是以请教各位。
...全文
440 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fifaboy00 2006-06-15
  • 打赏
  • 举报
回复
MSDN有这么段
When a window has been hidden, shown, moved, or sized, the system may determine that it is necessary to send a WM_SYNCPAINT message to the top-level windows of other threads. Applications must pass WM_SYNCPAINT toDefWindowProc for processing. The DefWindowProc function will send a WM_NCPAINT message to the window procedure if the window frame must be painted and send a WM_ERASEDBKGRND message if the window background must be erased.

当窗体被隐藏....时候,系统可能会发送WM-SYNCPAINT消息到其他线程的上层窗体.程序必须(PASS:是放弃处理??还是处理?个人感觉是不处理)这个消息在DEF..函数的处理.DEF..函数发送NCPAINT消息到窗口过程.如果FRAME需要擦背景,发送WM_ERASEDBK...

所以我感觉是不是不用自己处理???

另外他的参数都是没用的。WM_SYNCPAINT
= wParam; // reserved for use by the system
= lParam; // reserved for use by the system

个人感觉,希望有高人指点。
underyun 2006-06-14
  • 打赏
  • 举报
回复
没错,就是同步刷新的意思,该刷新哪块区域只有主窗口知道,问题就在于如何通过这个消息把信息传递给子窗口。作了一些尝试都没成功
allenhiman 2006-06-14
  • 打赏
  • 举报
回复
也可以直接调用InvalidateRgn
试试
allenhiman 2006-06-14
  • 打赏
  • 举报
回复
把该刷新的区域整合成一个CRgn数据
然后把这个rgn数据发给子窗口
fifaboy00 2006-06-13
  • 打赏
  • 举报
回复
SY是同步的那个意思。。。。
underyun 2006-06-13
  • 打赏
  • 举报
回复
感谢关注,一般的通讯发送消息还可以完成。但这是刷新问题呀,如果直接传递 WM_PAINT 的话,那刷新效果将会非常恶劣。如果传递自定义消息的话,至少要把无效区域传过来,如何获取无效区域,相信是一个更难的问题,呵呵
Qiushen 2006-06-13
  • 打赏
  • 举报
回复
发送消息

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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