我正在學習使用 MSHTML 在我的 WinApi 應用程式中托管瀏覽器,它是 IWebBrowser2 和 IHTMLDocument2。第一個問題是文字模糊,圖片左邊是我的app,右邊是IE:

那么,如何設定字體渲染呢?
uj5u.com熱心網友回復:
您的螢屏設定看起來像 150% 縮放,因此請確保將應用程式標記為 DPI 感知(在 IDE 中編輯清單或選擇選項)。
在
IDocHostUIHandler::GetHostInfo實作中添加DOCHOSTUIFLAG_DPI_AWARE到dwFlags.
HRESULT DocHostUIHandler::GetHostInfo( DOCHOSTUIINFO* pInfo )
{
pInfo->cbSize = sizeof(DOCHOSTUIINFO);
pInfo->dwFlags =
DOCHOSTUIFLAG_NO3DBORDER
| DOCHOSTUIFLAG_DPI_AWARE
| DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE;
pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
return S_OK;
}
- 通過設定注冊表項來更改模擬 IE 版本(對于高 DPI 不是必需的,而是為了更好的 CSS 支持)。
BOOL FixIeCompatMode()
{
DWORD fix_version = 11001;
// Get full path to application
WCHAR app_path[ PATH_MAX ];
DWORD result = GetModuleFileName( NULL, app_path, PATH_MAX );
if ( result == 0 || result == PATH_MAX )
return FALSE;
// Find application name part (without path)
WCHAR* app_name = app_path wcslen( app_path );
while ( app_name > app_path && app_name[ -1 ] != '\\' )
--app_name;
// Create or open FEATURE_BROWSER_EMULATION key
HKEY hKey;
WCHAR* reg_path = L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION";
if ( RegCreateKey( HKEY_CURRENT_USER, reg_path, &hKey) != ERROR_SUCCESS )
return FALSE;
// Add registy entry for our application e.g
// DisplayHTML.exe = 11001
// You can check it (or delete) with regedit
BOOL set = RegSetValueEx(
hKey,
app_name,
0,
REG_DWORD,
(void*)&fix_version,
sizeof(fix_version) ) == ERROR_SUCCESS )
RegCloseKey( hKey );
return set;
}
// Somewhere in your startup code (before creating WebView)
FixIeCompatMode();
編輯:
FixIeCompatMode設定 WebBrowser 仿真模式。根據分配給fix_versionWebBrowser 的值模擬不同版本的 IE。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/372141.html
上一篇:C 如何在子視窗中實時顯示文本
