WINAPI:如何避免根据Monitor比例因子缩放窗口?

时间:2018-08-01 09:27:00

标签: windows winforms winapi mfc

Windows 10。

我有2个监视器。让我们称它们为LM(左)和RM(右)。 我将LM比例设置为150%,将RM比例设置为100%。

我发现,如果应用程序窗口的50%以上位于LM上,那么该窗口的像素将缩放到150%,但是如果窗口中50%以上的窗口位于RM上,则它将缩放达到100%因此,这意味着应用程序窗口的缩放取决于LM或RM的比例。

所以我有以下问题:

  1. 如何避免这种行为并使我的Window具有恒定的比例因子?
  2. 如何从显示器获取比例因子?
  3. 如何在我的应用程序窗口中设置此比例因子。

当然使用WINAPI。

1 个答案:

答案 0 :(得分:1)

欢迎来到高dpi支持世界。在清单或启动时未声明DPI意识的应用程序会根据用户为其主要监视器设置的比例因子自动缩放。

如果您只想关闭所有这些自动缩放功能,则可以在程序开始时(即WinMain的第一行)从此调用开始:

#include <windows.h>
#include <shellscalingapi.h>

int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
     SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);

然后链接到shcore.lib

以上仅适用于Windows 8.1及更高版本。因此,在Windows 7或Vista上,您只需在启动时致电SetProcessDPIAware()

您在以下链接中询问的所有其他信息:

https://docs.microsoft.com/en-us/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows

https://docs.microsoft.com/en-us/windows/desktop/api/shellscalingapi/nf-shellscalingapi-setprocessdpiawareness

https://msdn.microsoft.com/en-us/C9488338-D863-45DF-B5CB-7ED9B869A5E2