• 全部
  • 问答

求助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);
}
...全文
103 点赞 收藏 5
写回复
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
回复
相关推荐
综教楼后的那个坑用双向链表实现 描述   在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。   从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:    *            * :    *            * :    *            * 8    *    **      * 7    *    **      * 6    *    **      * 5    *    ********* 4 <- 高度    *    ********* 3    ************** 2    ************** 1 平面 |  1  |2|   3    | 每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤ Wi ≤ 1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。   请你计算每个平面被水覆盖的时间。    灌水 水满后自动扩散 | | * | * * | * * * * V * * V * * * * * * .... * *~~~~~~~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~**~~~~~~* *~~~~**~~~~~~* * ********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* ************** ************** ************** ************** ************** **************    4 分钟后    26 分钟后        50 分钟后    平面 1 被水覆盖     平面 3 被水覆盖    平面 2 被水覆盖输入   输入的第一行是一个整数 N,表示平面的数量。从第二行开始的 N 行上分别有两个整数,分别表示平面的宽度和高度。 输出   输出每个平面被水覆盖的时间。
发帖
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2019-06-03 04:26
社区公告
暂无公告