在开发项目的时候,用到了浏览器控件,页面在兼容模式下有问题,标准模式下没有问题。为了绝对不能出问题,我就需要在程序中强行设置浏览器控件打开网页页面时用标准模式。WebBrowser控件的渲染模式可以通过设置注册表FEATURE_BROWSER_EMULATION 来实现。
[(HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"YourApplication.exe" = dword 8000 (Hex: 0x1F40)
这里YourApplicaiton.exe 是你的应用程序的EXE文件名。 8000 表示8.0的渲染模式,请对照下表:
IE8 Standards Mode 8000 (0x1F40) -- IE8 标准模式 (Standard Mode), IE8默认的模式
IE8 Standards Mode (Forced) 8888 (0x22B8) -- IE8 强制标准模式,在渲染失败的情况下不尝试用兼容视图模式
IE7 Standards Mode 7000 (0x1B58) -- IE7 兼容视图模式 (Compatible View), IE8的WebBrowser控件默认模式
例子代码:
以下代码设置浏览器控件需要的浏览器版本号并且强制使用标准模式。
char* old_locale = _strdup( setlocale(LC_ALL,NULL) );
setlocale( LC_ALL, "chs" );
DWORD dword = 8888;
WCHAR buffer[MAX_PATH] = {0};
GetModuleFileName(GetModuleHandle(0), buffer, MAX_PATH);
CString strexename = PathFindFileName(buffer);
HRESULT hr = ::SHSetValue(HKEY_CURRENT_USER,L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION",strexename,REG_DWORD,&dword,sizeof(dword));
hr = ::SHSetValue(HKEY_LOCAL_MACHINE,L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION",strexename,REG_DWORD,&dword,sizeof(dword));
部分内容参考:http://blog.youkuaiyun.com/wingeek/article/details/4022102
在开发Windows应用程序时,遇到浏览器控件在兼容模式下显示问题。为确保页面正常,通过设置注册表FEATURE_BROWSER_EMULATION键值,将WebBrowser控件设置为8.0渲染模式,即dword 8000。这将使控件以IE8标准模式运行,避免兼容性问题。可通过修改'HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION'下的应用程序键值来实现。代码示例展示了如何进行设置。
4051

被折叠的 条评论
为什么被折叠?



