C++中,怎么根据HMONITOR指定对应的hwnd
时间: 2024-10-15 12:15:51 浏览: 49
在C++中,HMONITOR(监视器标识符)是一个Windows系统API的概念,用于表示屏幕上的某个物理显示器。要根据HMONITOR找到对应的HWND(窗口句柄),通常需要借助Windows的WM_WINDOWPOSCHANGED消息处理或Windows API函数`MonitorFromWindow`。
首先,你需要有一个窗口句柄,然后可以使用`MonitorFromWindow`函数将HMONITOR转换为一个窗口相对于特定显示器的位置。如果窗口位于指定的监视器上,该函数会返回非零值;如果不在,则返回0。
以下是使用`MonitorFromWindow`的示例:
```cpp
#include <windows.h>
#include <atlbase.h>
LRESULT CALLBACK MonitorHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg == WM_WINDOWPOSCHANGED && wParam == WMSZ_BOTTOMRIGHT)
{
MONITORINFOEX mi;
ZeroMemory(&mi, sizeof(mi));
mi.cbSize = sizeof(MONITORINFOEX);
if (GetMonitorInfo(MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST), &mi))
{
HMONITOR monitorHandle = mi.hMonitor;
// ... 使用monitorHandle获取对应的窗口信息或操作
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int main()
{
// 初始化窗口并设置窗口消息处理器
HWND hwnd = CreateWindow(...);
SetWindowLong(hwnd, GWL_WNDPROC, (LONG_PTR)MonitorHandler);
// ... 其他窗口操作
return 0;
}
```
在这个例子中,当窗口位置发生改变(WM_WINDOWPOSCHANGED且最后边界位置WMSZ_BOTTOMRIGHT)时,窗口处理器会检查窗口所在的监视器,并提供HMONITOR。
阅读全文