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

如果我在位置(0,0)用RECT调用SetWindowPlacement,那么我的窗口没有't actually place the window flush in the corner. There'一些填充 . 这是由于GetWindowRect vs GetClientRect . 我可以计算这个差异并调整以考虑填充 . 这会产生大约(-7,0)的反直觉位置 . 在单个显示器上,此结果是像素完美的 .

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

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