Windows 的多显示支持API有错误bug
- 函数 EnumDisplayMonitors 的HDC montitor 是无效的。
回调函数BOOL procSingleMonitor(HMONITOR hMonitor,HDC hdcMonitor,LPRECT lprcMonitor); static BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor,HDC hdcMonitor,LPRECT lprcMonitor,LPARAM pInstance) { CSysEnv * pThis =(CSysEnv *)pInstance; return pThis->procSingleMonitor(hMonitor,hdcMonitor,lprcMonitor); }
- 获取的设备名称是错误的。需要去掉"\\."三个前缀字符
比如 deviceName: "\\.\DISPLAY1\Monitor0" 需要去掉 “\\.”
在官方范例
https://docs.microsoft.com/en-us/windows/win32/gdi/using-multiple-monitors-as-independent-displays
提到
hdc = CreateDC(lpszDisplayName, NULL, NULL, lpDevMode);
叫我们直接从In this call, the lpszDisplayName parameter is one of the device names returned by EnumDisplayDevices and lpDevMode is a description of the graphics mode for this device. The resulting hdc can be used to perform any graphics operation to the device 是错误的,需要去掉三个前缀才能正确使用。