【发布时间】:2020-12-20 21:00:55
【问题描述】:
如何获得正确的 DPI 缩放系数?我需要的是屏幕截图中显示的百分比,在本例中为 200%。下面的代码给出了 SCALE_180_PERCENT。我希望下面的代码应该返回 SCALE_200_PERCENT。系统为 Windows 10,Surface 2,显示分辨率 3000x2000,自定义缩放关闭,Windows 应用修复缩放开启。
#include <iostream>
#include <Windows.h>
#include <shellscalingapi.h>
#pragma comment(lib, "Shcore.lib")
int main()
{
HWND hWnd = GetDesktopWindow();
HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
DEVICE_SCALE_FACTOR devScaleFactor;
HRESULT res = GetScaleFactorForMonitor(hMonitor, &devScaleFactor);
std::cout << "Device scale factor: " << devScaleFactor << std::endl;
UINT dpi = GetDpiForWindow(hWnd);
std::cout << "GetDpiForWindow DPI: " << dpi << std::endl;
return 0;
}
【问题讨论】:
-
您没有处理任何错误。一旦你剥离了所有运行时动态链接,你就有足够的空间来实际处理(或至少观察)任何错误。
-
在 prod 代码中我非常喜欢 :) 这只是为了让代码 sn-p 更短
-
那么,取出运行时动态链接并节省大约 80% 的空间用于 真实 代码。
-
GetScaleFactorForMonitor支持的最低客户端为 Windows 8.1 该应用支持 Win7。因此动态链接 - 剪切和粘贴。是的,Win10 的示例中不需要动态链接 -
我们不关心您的应用。我们关心您的问题。该问题不需要在已停产的系统上运行或复制。