WINAPI:如何避免根据监视器比例因子缩放窗口



Windows 10。

我有两台显示器。让我们称它们为LM(左(和RM(右(。我为LM比例设置了150%,为RM设置了100%比例因子。

我发现,如果应用程序窗口的50%以上位于LM上,则该窗口的像素将缩放为150%,但如果应用程序的50%以上处于RM上,则会缩放为100%。因此,这意味着应用程序窗口的缩放取决于它的一部分在LM或RM上的多少。

所以我有以下问题:

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

当然要使用WINAPI。

欢迎来到高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及更高版本。因此,在Windows7或Vista上,您只需在启动时调用SetProcessDPIAware()即可。

你在下面的链接中询问的其他一切:

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

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

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

最新更新