基于CDHtmlDialog对话框的MFC和JS互相调用

1、设置程序IE内核

在APP.InitInstance()中调用该方法,m_strStylesName程序名

BOOL CIE_SampleApp::SetRegistry(void)
{
	CRegKey key;
	DWORD dwNum = 0;
	DWORD pdwType;
	char keyValue[100];
	memset(keyValue, 0, 100);
	ULONG pnBytes;
	//先检查电脑的IE版本
	if (key.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Internet Explorer"), KEY_READ) != ERROR_SUCCESS)
	{
		return FALSE;
	}
	else
	{
		key.QueryValue("Version", &pdwType, keyValue, &pnBytes);
		keyValue[pnBytes] = '\0';
		CString StrVersion = keyValue;
		StrVersion = StrVersion.Left(StrVersion.Find("."));
		if (StrVersion != ""&&atoi(StrVersion) < 9)//IE浏览器版本<9
		{
			if (MessageBox(NULL, "Internet Explorer(IE)浏览器内核版本低于9,请更新IE浏览器,是否现在就去更新?", "提示", MB_YESNO) == IDYES)
				ShellExecute(NULL, _T("open"), _T("http://windows.microsoft.com/zh-cn/internet-explorer/download-ie"), NULL, NULL, SW_SHOWMAXIMIZED);
			return TRUE;
		}
	}
	if (key.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION")) != ERROR_SUCCESS)
		return FALSE;
	else
		key.QueryDWORDValue(m_strStylesName, dwNum);
	if (dwNum < 0x0000270f)//获得程序指定的IE内核低于IE9
	{
		key.SetDWORDValue(m_strStylesName, 0x0000270f);
	}
	key.Close();
	return TRUE;
}

2、MFC调用JS

CSimpleArray<CComBSTR>  paramArray;
	paramArray.Add("mfc1");
	paramArray.Add("mfc2");
	CComVariant r;
	m_oCallScript.Run("MFCtoJS", paramArray, &r);
	if (r.vt == VT_BSTR)
	{
		CString strValue;
		r.ChangeType(VT_BSTR);
		_variant_t var_t;
		_bstr_t bstr_t;
		var_t = r;
		bstr_t = var_t;
		strValue.Format("%s", (const char *)bstr_t);
		MessageBox("JS返回值:" + strValue);
	}
 function MFCtoJS(parm1, parm2){
            alert("MFC调用JS,参数1:" + parm1 + "参数2:" + parm2);
            return "js return";
        }

3、JS调用MFC

function JStoMFC(){
            var r = window.external.JStoMFC("js1", "js2");
            alert("MFC返回值:" + r);
        }
BEGIN_DISPATCH_MAP(CIE_SampleDlg, CDHtmlDialog)
	DISP_FUNCTION(CIE_SampleDlg, "JStoMFC", JStoMFC, VT_BSTR, VTS_BSTR VTS_BSTR)//JS调用映射
END_DISPATCH_MAP()

BSTR CIE_SampleDlg::JStoMFC(char* parm1, char* parm2)
{
	MessageBox("JS调用MFC,参数1:" + (CString)parm1 + ",参数2:" + (CString)parm2, MB_OK);
	CString strResult = "mfc return";
	return strResult.AllocSysString();
}

工程源码点此下载

猜你喜欢

转载自blog.csdn.net/woshileihuanji/article/details/90697946