【发布时间】:2013-04-10 08:02:04
【问题描述】:
当窗口设置为“将文本大小调整为“125%”时,我的 Win32 应用程序的 UI(但不是它的窗口大小)会按比例放大。这会导致文本字符串被截断并且 UI 元素从边缘消失窗户。
我想防止这种情况发生,这样文本就不会被放大,并且应用程序可以正确显示。由于让这个旧的旧版应用程序正确识别 DPI 的时间投入太高,我只想通过调整 UI 元素的大小来防止 Windows 破坏 UI 来使该应用程序可用。
我曾尝试在启动期间调用 SetProcessDPIAware(),但当它不起作用时,表明应用程序在其清单中是 DPI Aware。但是,这些措施都没有任何效果。
我用来指定 DPI 感知的清单片段:
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<asmv3:application
xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
【问题讨论】:
-
“manifest”和“assembly”听起来不像标准的 C++。您使用的是 C++/CLI 还是 C#?您应该正确地重新标记您的问题。
-
@ArneMertz,不幸的是,微软也为常规 C++ 制作了必要的清单。例如,这是获得 UAC 提升的方法。
-
@ArneMertz 程序集清单是标准的 Win32 并且从 Windows XP 开始使用,当时它允许主题化(除其他外),然后是 Vista/7,它指定了所需的权限和提升。
-
mackenir,这是视图还是对话框?
-
@Deanna “需要计算标签定位”。确实——考虑到在 WTL 中实现这样的简单东西所需的努力,我不会打扰 :)。很遗憾,没有办法只说“Windows,请不要通过无能地尝试扩大我的 UI 来破坏我的 UI”...
标签: c++ winapi visual-studio-2008 dpi