首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于DPI问题

关于DPI问题
EN

Stack Overflow用户
提问于 2009-02-21 04:21:47
回答 3查看 2.9K关注 0票数 3

我有一个WIN32软件,它的UI是设计在96DPI,所以当用户改变窗口DPI从96到120或更大,UI将是错误的。我想知道是否有API强制我的软件以96DPI显示UI。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-21 06:37:27

从Windows Vista开始,DPI的缩放应该是自动进行的。我没有任何直接的经验来了解它是如何工作的,但这里有一个页面解释了如何关闭它:

http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx

票数 2
EN

Stack Overflow用户

发布于 2009-02-21 06:58:24

您还可以为您的应用程序添加appcompat密钥。注册表中的位置为:

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

这是每个用户的设置,在HKEY_LOCAL_MACHINE中也有相同的密钥,但这当然是一个系统设置,需要提升权限才能写入。像这样添加key:

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

将为您的程序启用该兼容性标志,这将关闭DPI缩放。这是为Vista+准备的。

SetProcessDPIAware也是一种选择,但根据文档,请注意存在竞争条件的危险。

票数 2
EN

Stack Overflow用户

发布于 2009-02-21 04:42:49

没有API可以强制你的应用程序以96DPI显示。DPI是设备设置,不能针对每个应用程序进行控制。

如果你可以改变你的程序,你可以缩放你的用户界面,使其在高DPI上看起来更好。您需要调用GetDeviceCaps(http://msdn.microsoft.com/en-us/library/dd144877(VS.85%29.aspx);更具体地说,您需要使用LOGPIXELSXLOGPIXELSY返回的数字来计算X和Y刻度。如下所示:

代码语言:javascript
复制
HDC hdc;
double m_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX) / 96.0;
double m_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/572270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档