【发布时间】:2012-09-29 12:50:31
【问题描述】:
我想要实际屏幕 dpi/ppi,而不是 C++ 中用于字体的 dpi 设置。
我尝试了以下代码:
版本 1,报告 72 dpi,这是错误的。
SetProcessDPIAware(); //true
HDC screen = GetDC(NULL);
double hSize = GetDeviceCaps(screen, HORZSIZE);
double vSize = GetDeviceCaps(screen, VERTSIZE);
double hRes = GetDeviceCaps(screen, HORZRES);
double vRes = GetDeviceCaps(screen, VERTRES);
double hPixelsPerInch = hRes / hSize * 25.4;
double vPixelsPerInch = vRes / vSize * 25.4;
ReleaseDC(NULL, screen);
return (hPixelsPerInch + vPixelsPerInch) * 0.5;
版本 2,报告 96 dpi,这是 Windows dpi 字体设置,但不是实际屏幕 dpi。
SetProcessDPIAware(); //true
HDC screen = GetDC(NULL);
double hPixelsPerInch = GetDeviceCaps(screen,LOGPIXELSX);
double vPixelsPerInch = GetDeviceCaps(screen,LOGPIXELSY);
ReleaseDC(NULL, screen);
return (hPixelsPerInch + vPixelsPerInch) * 0.5;
【问题讨论】:
-
@BrianHaak:正如在这个问题和您链接的问题中所指出的,EDID 并不总是可用,有时 EDID 中的信息是错误的。
标签: c++ windows screen dpi ppi