Mfc 如何激活";禁用高dpi设置上的显示缩放”;默认情况下

Mfc 如何激活";禁用高dpi设置上的显示缩放”;默认情况下,mfc,c++-cli,windows-8.1,dpi,chromium-embedded,Mfc,C++ Cli,Windows 8.1,Dpi,Chromium Embedded,我们的应用程序在某些具有高DPI设置(150%或更高)的Windows 8.1设备上无法正常工作。具体来说,我们使用CEF托管嵌入式web浏览器。所有这些嵌入式CEF浏览器都在渲染元素偏移量 当选中“禁用高DPI设置上的显示缩放”时,应用程序工作正常。但是,默认情况下不会选中此选项 如何确保我的应用程序(基于MFC)生成时默认勾选了此设置 我试着在清单中关闭DPI意识,如:和。但是,这似乎不起作用。通过对CEF的更新,基本问题得到了解决 然而,在此期间的解决方案(以及这个问题的实际答案,希望对其

我们的应用程序在某些具有高DPI设置(150%或更高)的Windows 8.1设备上无法正常工作。具体来说,我们使用CEF托管嵌入式web浏览器。所有这些嵌入式CEF浏览器都在渲染元素偏移量

当选中“禁用高DPI设置上的显示缩放”时,应用程序工作正常。但是,默认情况下不会选中此选项

如何确保我的应用程序(基于MFC)生成时默认勾选了此设置


我试着在清单中关闭DPI意识,如:和。但是,这似乎不起作用。

通过对CEF的更新,基本问题得到了解决

然而,在此期间的解决方案(以及这个问题的实际答案,希望对其他人有用)是在(WiX)安装期间使用自定义操作打开“禁用高DPI设置上的显示缩放”复选框。下面是一些C++代码:

#include "shlwapi.h"

#include <winreg.h>
//
// Include the MSI declarations etc
//  - Also ensure the dll is linked with msi.lib
//
#include <msi.h>
#include <msiquery.h>
#pragma comment(lib, "msi.lib")

UINT __stdcall DisableHighDPIAware(MSIHANDLE hInstaller)
{
    HKEY key;
    DWORD dwDisposition;
    LONG error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)L"Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers", 0, NULL, 0, KEY_ALL_ACCESS | KEY_WRITE | KEY_WOW64_64KEY, NULL, &key, &dwDisposition);
    if (error != ERROR_SUCCESS)
    {
        return ERROR_INSTALL_FAILURE;
    }

    wchar_t pathToApp[MAX_PATH];
    DWORD PathSize = sizeof(pathToApp);
    error = MsiGetProperty(hInstaller, L"CustomActionData", pathToApp, &PathSize);
    if (error != ERROR_SUCCESS)
    {
        return ERROR_INSTALL_FAILURE;
    }

    wchar_t* value = L"~ HIGHDPIAWARE";
    PathAppend(pathToApp, L"app.exe");

    error = RegSetValueEx(key, (LPCWSTR)pathToApp, 0, REG_SZ, (const BYTE*)value, (DWORD)(lstrlen(value) + 1)*sizeof(TCHAR));
    if (error != ERROR_SUCCESS)
    {
        return ERROR_INSTALL_FAILURE;
    }

    return ERROR_SUCCESS;
}
#包括“shlwapi.h”
#包括
//
//包括MSI声明等
//-还要确保dll与msi.lib链接
//
#包括
#包括
#pragma注释(lib,“msi.lib”)
UINT uu stdcall禁用Highdpiaware(MSIHANDLE hInstaller)
{
香港海关关卡;
德沃德;
长错误=RegCreateKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)L“Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers”,0,NULL,0,KEY_ALL_ACCESS,KEY|u WRITE,KEY|WOW64_64,KEY,NULL,&KEY,&dwDisposition);
如果(错误!=错误\u成功)
{
返回错误\u安装\u失败;
}
wchar_t路径应用[最大路径];
DWORD PathSize=sizeof(pathToApp);
error=MsiGetProperty(hInstaller,L“CustomActionData”、pathToApp和PathSize);
如果(错误!=错误\u成功)
{
返回错误\u安装\u失败;
}
wchar_t*value=L“~HIGHDPIAWARE”;
PathAppend(pathToApp,L“app.exe”);
error=RegSetValueEx(key,(LPCWSTR)pathToApp,0,REG_SZ,(const BYTE*)值,(DWORD)(lstrlen(value)+1)*sizeof(TCHAR));
如果(错误!=错误\u成功)
{
返回错误\u安装\u失败;
}
返回错误\成功;
}

您必须在清单中打开DPI感知。