如何在Premake生成的VS C++项目中修改DPI清单设置
C++项目Visual Studio及Premake DPI感知清单配置方案
一、Visual Studio 手动配置步骤
- 右击你的C++项目,选择「属性」打开项目配置页
- 切换到「配置属性 → 清单工具 → 输入和输出」,将「嵌入清单」设置为「是 (/MANIFEST:EMBED)」
- 切换到「配置属性 → 清单工具 → 高级」,找到「DPI感知」选项,根据需求选择对应级别:
- 选「高 DPI 感知」对应系统级DPI适配
- 选「每个监视器高 DPI 感知」对应多显示器不同DPI的自适应适配,兼容性更好
- 保存配置后重新生成项目即可生效
如果需要手动指定自定义清单,可将写好的.manifest文件添加到项目,然后在「配置属性 → 清单工具 → 常规」的「附加清单文件」中填入你的清单文件路径即可。
二、Premake自动配置方案
高版本Premake(5.0 alpha 12及以上)
直接使用原生dpiawareness配置项即可,对应值可选:None(无DPI感知)、High(系统级DPI感知)、PerMonitor(每显示器DPI感知)、PerMonitorV2(每显示器V2版DPI感知,Win10 1703及以上支持,适配性最优)。
示例配置:
workspace "你的项目名称" configurations { "Debug", "Release" } architecture "x64" project "你的应用名称" kind "WindowedApp" language "C++" files { "src/**.h", "src/**.cpp" } -- 配置DPI感知级别 dpiawareness "PerMonitorV2"
低版本Premake兼容方案
如果使用的Premake版本不支持dpiawareness配置项,直接通过链接参数添加清单配置即可:
project "你的应用名称" -- 其他配置不变 linkoptions { "/MANIFEST:EMBED", "/MANIFESTUAC:\"dpiAwareness=PerMonitorV2, PerMonitor, System\"" }
配置完成后删除代码中SetProcessDPIAware()的调用即可,DPI感知会在进程启动时通过清单自动生效,不会出现运行时修改DPI感知导致的窗口闪烁、偏移问题。
内容的提问来源于stack exchange,提问作者idbrii
相关产品推荐
相关产品推荐

