Mfc 如何激活";禁用高dpi设置上的显示缩放”;默认情况下
我们的应用程序在某些具有高DPI设置(150%或更高)的Windows 8.1设备上无法正常工作。具体来说,我们使用CEF托管嵌入式web浏览器。所有这些嵌入式CEF浏览器都在渲染元素偏移量 当选中“禁用高DPI设置上的显示缩放”时,应用程序工作正常。但是,默认情况下不会选中此选项 如何确保我的应用程序(基于MFC)生成时默认勾选了此设置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意识,如:和。但是,这似乎不起作用。通过对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感知。