跳转至

DPI

DPI 全称 Dots per inch,即每英寸的点数,对于显示器来说就是每英寸的像素数量。

Display Scale Factor

早期的显示器基本都是 96 DPI 的,所以那时候的应用程序 UI 都是以 96 DPI 为标准的。现在显示器的 DPI 普遍比 96 高,这意味着同样大小的显示器,像素数量变多了。早期的应用程序放到现在的显示器上,尽管占用的像素数量和以前一样,但是显示器的像素密度大了,所以看上去应用程序的界面变小了。

为了解决上面的问题,Windows 引入了一个 Display Scale Factor,一般是显示器 DPI 除以基准值 96 的结果。

显示缩放
显示缩放

Windows 会骗应用程序说 DPI 还是 96,让它以 WindowSize / DisplayScaleFactor 的大小绘制界面,然后 Windows 再把界面放大 DisplayScaleFactor 倍。但是这样会导致界面变的不清晰。

DPI 感知

就是自己处理 DPI,不让 Windows 缩放。在应用启动时,调用 API 设置 Per-Monitor (V2) DPI Awareness。SetProcessDpiAwarenessContext function (winuser.h) - Win32 apps | Microsoft Learn

SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);

参考

High DPI Desktop Application Development on Windows - Win32 apps | Microsoft Learn


相关文章