如何在多监视器,混合DPI环境中设置窗口的位置/大小?

时间:2018-03-27 07:30:36

标签: c# c++ windows

我有一个C#应用程序试图通过本机Win32 API创建Windows's Snap功能的可自定义版本。通过hotkeys我的应用修改了其他应用程序窗口的位置/大小。我的主显示器是标准的1920x1080显示器。我的辅助监视器是3200x1800监视器,设置为250%,并放置在我的主监视器的左侧。

如果我在位置(0,0)处使用SetWindowPlacement拨打RECT,我的窗口实际上并没有将窗口齐平地放在角落里。有一些填充。这是由GetWindowRect vs GetClientRect引起的。我可以计算这个差异并调整以考虑填充。这会产生大约(-7,0)的反直觉位置。在一台显示器上,这个结果就像素完美。

但是,如果我尝试将窗口放在(-7,0)我的混合dpi,多显示器环境中,它会使窗口出现在正确的左上角位置但是...宽度和高度错误缩放250%。即使我把它放在(-1,0)也是如此。有趣的是,(-1,0)的超大窗口仍然在它和1920x1080屏幕的边缘之间有视觉填充!

我对这个结果并不完全感到惊讶。毕竟(-1,0)在另一台显示器上。但是,我无法找到一种方法将窗口齐平放置在与250%刻度显示器相邻的1080p显示器的左上角。 SetWindowPlacement和SetWindowPos似乎都不提供工作路径。

0 个答案:

没有答案