在 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)。
我尝试使用 GetDeviceCaps
和 EnumDisplaysettings
的方法获取 dpi,但它们都返回了主显示器的 dpi(注意:EnumDisplaySettings
设置 dmLogPixels
我认为如果我使用 ENUM_REGISTRY_SETTINGS
的 constnat EnumDisplaySettings
,那么 DPI 是否为 0,所以我不得不使用 ENUM_CURRENT_SETTINGS
).
我发现 returns 不同的唯一方法是 GetDpiForMonitor
和 MDT_Angular_DPI
或 MDT_Raw_DPI
的 MONITOR_DPI_TYPE
constnat,如果我使用 MDT_Effective_DPI
它给出了主显示器的那个。
现在这是我 运行 GetDpiForMonitor
:
的结果
None 的次要值除以主要值给我一个放大系数 1.5。有没有办法得到这个比例因子?
谢谢
我只是有一个想法,它起作用了我正在使用我的问题中列出的三种方法中的任何一种来获得缩放 height/width:
GetDeviceCaps
在 hdcScreen
或
GetMonitorInfo
或
EnumDisplayMonitors
然后我将它除以 EnumDisplaySettings
中的 width/height。
这是我找到的唯一方法,还有其他方法吗?请专家验证一下。
我遇到了一个问题,因为我正在为非 dpi 感知进程编码,直到出现错误修复。
所以现在我需要解决这个问题。我的想法是:找出放大系数,然后将我的元素 width/height 缩小那么多。
所以现在我正在绘制一个 canvas,它是第二个显示器的全宽和全高,它是 1920 x 1080
(宽 x 高)。但从视觉上看(截图后用 photoshop 测量)结果是 2880 x 1620
。这是 1.5 的放大系数(2880 除以 1920 或 1620 除以 1080)。
我尝试使用 GetDeviceCaps
和 EnumDisplaysettings
的方法获取 dpi,但它们都返回了主显示器的 dpi(注意:EnumDisplaySettings
设置 dmLogPixels
我认为如果我使用 ENUM_REGISTRY_SETTINGS
的 constnat EnumDisplaySettings
,那么 DPI 是否为 0,所以我不得不使用 ENUM_CURRENT_SETTINGS
).
我发现 returns 不同的唯一方法是 GetDpiForMonitor
和 MDT_Angular_DPI
或 MDT_Raw_DPI
的 MONITOR_DPI_TYPE
constnat,如果我使用 MDT_Effective_DPI
它给出了主显示器的那个。
现在这是我 运行 GetDpiForMonitor
:
None 的次要值除以主要值给我一个放大系数 1.5。有没有办法得到这个比例因子?
谢谢
我只是有一个想法,它起作用了我正在使用我的问题中列出的三种方法中的任何一种来获得缩放 height/width:
GetDeviceCaps
在hdcScreen
或GetMonitorInfo
或EnumDisplayMonitors
然后我将它除以 EnumDisplaySettings
中的 width/height。
这是我找到的唯一方法,还有其他方法吗?请专家验证一下。