在 Win81+ 非 dpi 感知进程中,找出比例因子

In Win81+ non-dpi aware process, figure out scale factor

我遇到了一个问题,因为我正在为非 dpi 感知进程编码,直到出现错误修复。

所以现在我需要解决这个问题。我的想法是:找出放大系数,然后将我的元素 width/height 缩小那么多。

所以现在我正在绘制一个 canvas,它是第二个显示器的全宽和全高,它是 1920 x 1080(宽 x 高)。但从视觉上看(截图后用 photoshop 测量)结果是 2880 x 1620。这是 1.5 的放大系数(2880 除以 1920 或 1620 除以 1080)。

我尝试使用 GetDeviceCapsEnumDisplaysettings 的方法获取 dpi,但它们都返回了主显示器的 dpi(注意:EnumDisplaySettings 设置 dmLogPixels 我认为如果我使用 ENUM_REGISTRY_SETTINGS 的 constnat EnumDisplaySettings,那么 DPI 是否为 0,所以我不得不使用 ENUM_CURRENT_SETTINGS).

我发现 returns 不同的唯一方法是 GetDpiForMonitorMDT_Angular_DPIMDT_Raw_DPIMONITOR_DPI_TYPE constnat,如果我使用 MDT_Effective_DPI 它给出了主显示器的那个。

现在这是我 运行 GetDpiForMonitor:

的结果

None 的次要值除以主要值给我一个放大系数 1.5。有没有办法得到这个比例因子?

谢谢

我只是有一个想法,它起作用了我正在使用我的问题中列出的三种方法中的任何一种来获得缩放 height/width:

  • GetDeviceCapshdcScreen
  • GetMonitorInfo
  • EnumDisplayMonitors

然后我将它除以 EnumDisplaySettings 中的 width/height。

这是我找到的唯一方法,还有其他方法吗?请专家验证一下。