我尝试了ZkUtils
和gdiScaling
的所有可能组合,但还是没有运气。
如果我手动右键单击app.exe,并将“覆盖DPI高比例缩放”设置为“系统(增强)”,则效果很好。
dpiAware
答案 0 :(得分:1)
尝试此清单:
<asmv3:application>
<asmv3:windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
<gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
</asmv3:windowsSettings>
</asmv3:application>
它是从Windows 10 1809的MMC.exe hosts device manager and this must work中提取的:
Microsoft管理控制台(mmc.exe)将按以下方式按GDI缩放 默认情况下,在创建者更新中。这意味着许多内置Windows 管理单元(例如设备管理器)将从此功能中受益 创作者更新。
如果这仍然行不通,请使用via code函数和DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED
在"Include\10.0.BUILDNUMBER.0\shared\windef.h"
中定义为{p>
#define DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED ((DPI_AWARENESS_CONTEXT)-5)
答案 1 :(得分:0)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware>false</dpiAware>
</windowsSettings>
</application>
</assembly>
并确保您根本没有dpiAwareness
标签。检查清单合并; strings
足以检查最终二进制文件的清单。 dpiAware
标签的内容区分大小写。但是,由于缺少标签时,false
是默认设置,因此我认为是某个东西正在调用SetProcessDpiAware
或SetProcessDpiAwareness
。与strings
一起检查以确认您没有对SetProcessDpiAware
的引用。
在创建第一个窗口之前,可以通过调用SetProcessDpiAwareness(PROCESS_DPI_UNAWARE);
来尝试扑朔迷离。但这是一个坏主意。
所有信息均来自MSDN Setting the default DPI awareness for a process,MSDN SetProcessDPIAwareness和处理此材料的个人经验。
答案 2 :(得分:0)
确保您的清单ID为1。我设法通过名为win32opengl.exe的.exe将其与Dev-C ++ 5.11 / MinGW 4.9.2配合使用。这是我的文件内容:
resource.h
#ifndef RESOURCE_H
#define RESOURCE_H
#define ID_MANIFEST 1
#endif
resource.rc
#include "resource.h"
ID_MANIFEST 24 "win32opengl.exe.manifest"
win32opengl.exe.manifest
<?xml version="1.0" encoding="UTF-8"?>
<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>