代码之家  ›  专栏  ›  技术社区  ›  Noitidart

在Win81+非dpi感知过程中,计算比例因子

  •  0
  • Noitidart  · 技术社区  · 9 年前

    我有一个问题,我正在为一个不支持dpi的进程进行编码,直到bug修复落地。

    所以现在我需要做一个变通。我的想法是这样的:计算放大因子,并将元素的宽度/高度按比例缩小。

    所以现在我正在画一幅画布,它是第二台显示器的全宽和全高 1920 x 1080 (宽x高)。但从视觉上看(通过截图后的photoshop测量) 2880 x 1620 这是1.5的放大因子(2880除以1920或1620除以1080)。

    我尝试使用以下方法获取dpi GetDeviceCaps EnumDisplaysettings 但它们都返回了主监视器的状态(注意: EnumDisplaySettings dmLogPixels 如果我这样做,我认为DPI为0 枚举显示设置 常量为 ENUM_REGISTRY_SETTINGS 所以我不得不使用 ENUM_CURRENT_SETTINGS ).

    我发现唯一不同的返回方法是 GetDpiForMonitor 具有 MONITOR_DPI_TYPE 常数 MDT_Angular_DPI MDT_Raw_DPI ,如果我使用 MDT_Effective_DPI 它给出了主监视器的结果。

    这是我跑步的结果 获取监视器数据 :

    没有一个二次值除以一次值,得到的比例因子是1.5。有没有办法得到这个比例因子?

    谢谢

    1 回复  |  直到 9 年前
        1
  •  1
  •   Community CDub    7 年前

    我刚刚有了一个想法,我正在使用我的问题中概述的三种方法中的任何一种来获得缩放的高度/宽度: Improper width and height for second monitor from GetMonitorInfo and GetDeviceCaps

    • GetDeviceCaps 在…上 hdcScreen
    • GetMonitorInfo
    • EnumDisplayMonitors

    然后用宽度/高度除以 EnumDisplaySettings .

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