如何将句柄用作函数参数

How to use a handle as a function parameter?

本文关键字:函数 参数 句柄      更新时间:2023-10-16

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

void refreshWindow (HWND myWNDhandle)
{
    InvalidateRect(myWNDhandle, NULL, FALSE);
}

如果我将"hwnd"作为参数传递并运行代码,如下所示:

refreshWindow (hwnd);

我想我的窗户会再次被粉刷,不幸的是我的窗户不会。我做错了什么?

从机械角度来说,您的呼叫是完美的。因此,要么HWND本身是无效的,正如其他评论者所建议的那样,你应该在IsWindow()上断言以验证这一点,要么你成为了窗口重新绘制异步特性的受害者:

调用InvalidateRect只会将窗口标记为需要绘制,如果没有其他更高优先级的事件或消息要处理,则对GetMessage的后续调用将生成绘制消息来绘制窗口。

通常,想要立即刷新窗口内容的方法会在调用InvalidateRect之后再调用UpdateWindow,这将确保在返回之前重新绘制窗口。