【问题标题】:WINAPI: How to avoid scaling of Window depending on Monitor scale factor?WINAPI:如何避免根据监视器比例因子缩放窗口?
【发布时间】:2018-08-01 09:26:59
【问题描述】:

Windows 10。

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

我发现如果超过 50% 的应用程序窗口位于 LM 上,则该窗口的像素会缩放到 150%,但如果超过 50% 的窗口位于 RM 上,则它会缩放到 100%。所以这意味着应用程序窗口的缩放取决于它在 LM 或 RM 上的比例。

所以我有以下问题:

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

当然是使用 WINAPI。

【问题讨论】:

标签: windows winforms winapi mfc


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2013-07-28
    • 2018-10-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多