【发布时间】:2020-12-31 00:46:01
【问题描述】:
我有一个在 Windows 10 上运行的双显示器设置,我的辅助显示器是触摸屏。我可以用EnumDisplayMonitors 检测到两个显示器,并发现有一个带有GetSystemMetrics(SM_DIGITIZER) 的数字化仪。我希望在触摸显示器上打开我的应用程序窗口,但我找不到任何功能可以告诉我数字化仪“属于”哪个显示器。
在没有解决方案的情况下,我想我可以有一个启动序列,在此期间要求用户点击触摸屏,然后我的代码可以将窗口移动到相应的监视器。我只是希望它比那更光滑。
有什么想法吗?
【问题讨论】:
-
Win32_PointingDevice类可以查询触摸屏(PointingType)信息。你可以试试看有没有什么信息可以用来匹配你从EnumDisplayMonitors/EnumDisplayDevices得到的显示器信息,比如DISPLAY_DEVICE.DeviceName,来帮助你确定触摸显示器。 -
GetPointerDevices 应该为您提供该信息 docs.microsoft.com/en-us/windows/win32/api/winuser/… POINTER_DEVICE_INFO 包含监视器句柄和设备类型 (POINTER_DEVICE_TYPE)。还有 GetPointerDeviceRects 可以为您提供设备映射到的位置。无法测试我没有触摸显示器。
-
感谢丽塔和西蒙。西蒙的建议似乎更容易实现,所以我先去做了。我将 POINTER_DEVICE_INFO 中的监视器句柄与 EnumDisplayMonitors 返回的句柄进行了匹配。如果您想将其发布为答案,我会将其标记为已接受。
标签: c++ winapi touch multiple-monitors