Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将句柄用作函数参数?_C++_Winapi - Fatal编程技术网

C++ 如何将句柄用作函数参数?

C++ 如何将句柄用作函数参数?,c++,winapi,C++,Winapi,我在为win32应用程序编写代码时遇到了一个问题,即如何将句柄用作函数参数。例如,使用此功能: void refreshWindow (HWND myWNDhandle) { InvalidateRect(myWNDhandle, NULL, FALSE); } 如果我传入“hwnd”作为参数并运行代码,如下所示: refreshWindow (hwnd); 我想我的窗户会被重新粉刷,不幸的是我的窗户不会。 我做错了什么?你的电话很好。因此,要么HWND本身无效,并且正如其他评论者所

我在为win32应用程序编写代码时遇到了一个问题,即如何将句柄用作函数参数。例如,使用此功能:

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()。