2009-02-21 122 views
2

我有一个WIN32 SW,其UI是在96 DPI中设计的,所以当用户将Windows DPI从96更改为120或更大时,UI将会出错。我想知道是否有API来强制我的SW以96DPI显示UI。关于DPI问题

回答

1

没有API强制您的应用以96DPI显示。 DPI是一种设备设置,无法根据应用程序进行控制。

如果您可以更改程序,您可以缩放您的UI,以便在高DPI上正常查看。您需要致电GetDeviceCaps;更具体地说,您需要使用为LOGPIXELSXLOGPIXELSY返回的数字计算X和Y比例。类似这样的:

HDC hdc; 
double m_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX)/96.0; 
double m_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY)/96.0; 
2

您还可以添加程序兼容性键为您的应用。在注册表中这样做的地方是:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

这是每个用户设置,存在HKEY_LOCAL_MACHINE相同的密钥,但当然这是系统设置,将需要提升权限写入。添加一个关键,像这样:

"C:\path\to\app.exe"="HIGHDPIAWARE"

将启用兼容性标志为您的程序,这将关闭DPI缩放。这是Vista +。根据文件记录,

SetProcessDPIAware也是一个选项,但请注意存在竞争条件的危险。