C++ 如何将句柄用作函数参数?
我在为win32应用程序编写代码时遇到了一个问题,即如何将句柄用作函数参数。例如,使用此功能:C++ 如何将句柄用作函数参数?,c++,winapi,C++,Winapi,我在为win32应用程序编写代码时遇到了一个问题,即如何将句柄用作函数参数。例如,使用此功能: void refreshWindow (HWND myWNDhandle) { InvalidateRect(myWNDhandle, NULL, FALSE); } 如果我传入“hwnd”作为参数并运行代码,如下所示: refreshWindow (hwnd); 我想我的窗户会被重新粉刷,不幸的是我的窗户不会。 我做错了什么?你的电话很好。因此,要么HWND本身无效,并且正如其他评论者所
void refreshWindow (HWND myWNDhandle)
{
InvalidateRect(myWNDhandle, NULL, FALSE);
}
如果我传入“hwnd”作为参数并运行代码,如下所示:
refreshWindow (hwnd);
我想我的窗户会被重新粉刷,不幸的是我的窗户不会。
我做错了什么?你的电话很好。因此,要么HWND本身无效,并且正如其他评论者所建议的,您应该在IsWindow()上断言以验证这一点,要么您是窗口重新绘制的异步特性的受害者: 调用
GetMessage
只会将窗口标记为需要绘制,如果没有其他更高优先级的事件或消息要处理,则随后调用GetMessage
将生成绘制消息来绘制窗口
通常,要立即刷新窗口内容的方法,在调用
invalidate
之后,再调用UpdateWindow
——这将确保在返回之前重新绘制窗口。您的调用是完美的。因此,要么HWND本身无效,并且正如其他评论者所建议的,您应该在IsWindow()上断言以验证这一点,要么您是窗口重新绘制的异步特性的受害者:
调用GetMessage
只会将窗口标记为需要绘制,如果没有其他更高优先级的事件或消息要处理,则随后调用GetMessage
将生成绘制消息来绘制窗口
通常,要立即刷新窗口内容的方法,在调用
invalidateEndow
之后,调用updateEndow
——这将确保在返回之前重新绘制窗口。将此行添加到refreshWindow方法:assert(IsWindow(myWNDhandle));这是将句柄用作函数参数的正确方法。您的问题在别处。您必须在invalidate()之后调用UpdateWindow()。将此行添加到refreshWindow方法:assert(IsWindow(myWNDhandle));这是将句柄用作函数参数的正确方法。您的问题在别处。必须在InvalidateEndow()之后调用UpdateEndow()。