当我遇到问题时,我正在为win32应用程序编写代码,如何将句柄用作函数参数。例如,使用此功能:
void refreshWindow (HWND myWNDhandle)
{
InvalidateRect(myWNDhandle, NULL, FALSE);
}
如果我传入" hwnd"作为参数并运行代码,如下所示:
refreshWindow (hwnd);
我会认为我的窗户会再次被涂漆,不幸的是我的窗户不会被打败。 我做错了什么?
答案 0 :(得分:2)
机械上你的电话是完美的。因此,无论HWND本身是无效的,并且正如其他评论者所建议的那样,你应该断言IsWindow()来验证它,或者你正在成为窗口重绘的异步性质的牺牲品:
调用InvalidateRect
只会将窗口标记为需要绘制,如果没有其他更高优先级的事件或消息,后续调用GetMessage
将生成绘制消息以绘制窗口过程
通常情况下,想要立即刷新窗口内容的方法,通过调用InvalidateRect
跟随调用UpdateWindow
- 这将确保在返回之前重新绘制窗口。