关于DuiLib搞DPI适配问题

在某些情况下,虽然在高DPI的设置下DuiLib能正常的缩放,但是缩放后的显示效果很不好,文字图片显示模糊,影响用户体验,经过多次试验,解决办法如下:
在工程文件设置中,对相应工程做属性设置:


在工程->属性->清单工具->输入和输出->附加清单文件,在此配置项中选择相应的清单文件,清单文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <!-- Windows 6.0 Style -->  
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
        </dependentAssembly>
    </dependency>
    <!-- Administrator -->  
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker"></requestedExecutionLevel>
            </requestedPrivileges>
        </security>
    </trustInfo>
    <!-- DPI Aware -->
    <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>
    <!-- OSVersion -->
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">   
        <application>   
            <!-- Windows 10 -->   
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>  
            <!-- Windows 8.1/Windows Blue/Server 2012 R2 -->  
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>  
            <!-- Windows Vista/Server 2008 -->  
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>   
            <!-- Windows 7/Server 2008 R2 -->  
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>  
            <!-- Windows 8/Server 2012 -->  
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>  
        </application>   
    </compatibility>  
</assembly>

其中requestedExecutionLevel 对应 工程->属性->连接器->清单文件->UAC执行级别,这两项需要相同,不然链接不通过;
dpiAware对应是否自动适配DPI,true为自动适配。


以上配置设置完成后,在代码中,需要对每个单独的窗体(WindowImplBase)设置相应的DPI,代码如下:
m_pm.SetDPI(CDPI::GetMainMonitorDPI());


关于图片资源的配置,在高DPI设置下,DuiLib会自动加载相应DPI缩放比例的图片资源,如:normalimage=“file=‘image\login_normal.png’”,在150缩放比的DPI设置下,资源自动加载image\[email protected],如果资源中没有该文件,则资源无法正常加载,显示为空白。ui文件(xml)无需做额外修改,只需在资源文件中放入相应命名规则的文件即可

猜你喜欢

转载自blog.csdn.net/liusarzn/article/details/89395277