求助win32重绘后不刷新问题。

weixin_42976457 2019-06-03 04:26:55
写的win32 dll里,就是外部.net窗口最小化,再最大化,dll里hook取得WM_PAINT消息后,重绘完。外部窗口自己又收到一次重绘消息,把画弄没了,此时用鼠标点下电脑屏幕,画的东西又出来了。是用的双缓存。在钩子里取得消息后返回空的消息,也是没解决,大家有遇到过这样的问题吗?
}
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{

tagMSG* msg;
msg = (tagMSG*)lParam;
if (nCode == HC_ACTION && (msg->message == WM_PAINT))
{

dispImage(src, hW);

return CallNextHookEx(hHook, nCode, wParam, lParam);

}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
...全文
207 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42976457 2019-06-04
  • 打赏
  • 举报
回复
找到原因了,终于解决了
weixin_42976457 2019-06-04
  • 打赏
  • 举报
回复
WM_PAINT和WM_ERASEBKGND截获都反空了,用spy++看,如上图最小最大化后,不知道哪里来的WM_ERASEBKGND刷背景(上图红色框)把图刷没了,然后随便按下键,又重新PRINTCLIENT就出现图了。
sdghchj 2019-06-04
  • 打赏
  • 举报
回复
问题并不在于WM_ERASEBKGND,而在于每次WM_PAINT时你都要绘制上你的东西。
weixin_42976457 2019-06-03
  • 打赏
  • 举报
回复
搜了下资料说WM_ERASEBKGND消息把背景刷白,hook WH_GETMESSAGE竟然截不到WM_ERASEBKGND,
sdghchj 2019-06-03
  • 打赏
  • 举报
回复
问题可能是在nCode == HC_ACTION吧,去掉这个条件再试试,你都这样判断了,说明不见得每次WM_PAINT时nCode都等于 HC_ACTION

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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