当前位置: 首页 > article >正文

基于MFC的JavaScript进行网页数据交互

目录

前言

一、创建html对话框工程

二、使用步骤

1.引入JavaScript接口代码

2.重写相关接口

3.在html网页中添加C/C++调用的接口

4.在MFC工程中添加调用接口

5.设置确认按键触发调用

6.运行结果

总结


前言

如何快速的进行MFC开发,这里我介绍一种JavaScript与C/C++交互的方式。

一、创建html对话框工程

我这里是基于VS2010的开发环境搭建的,以下的操作均在VS2010中。

二、使用步骤

1.引入JavaScript接口代码

LPDISPATCH m_pDisp;         //判断网页加载
CCallScript pCallScript;    //脚本调用

2.重写相关接口

代码如下(示例):

void CMFCHtmlDlg::OnSize(UINT nType, int cx, int cy)
{
    CDHtmlDialog::OnSize(nType, cx, cy);

    // TODO:  在此处添加消息处理程序代码
    if (m_pBrowserApp != NULL)
    {
        m_pBrowserApp->put_Top(0);
        m_pBrowserApp->put_Left(0);
        m_pBrowserApp->put_Height(cy);
        m_pBrowserApp->put_Width(cx/* - 50*/);
    }
}

void CMFCHtmlDlg::OnNavigateComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
{
    CDHtmlDialog::OnNavigateComplete(pDisp, szUrl);

    // TODO:  在此添加专用代码和/或调用基类
    if (!m_pDisp)
        m_pDisp = pDisp;
}

void CMFCHtmlDlg::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
{
    CDHtmlDialog::OnDocumentComplete(pDisp, szUrl);

    // TODO:  在此添加专用代码和/或调用基类
    if (m_pDisp && (m_pDisp == pDisp))//判断网页是否真正加载完毕
    {
        IHTMLDocument2* pDoc;
        HRESULT hr = GetDHtmlDocument(&pDoc);
        pCallScript.SetDocument(pDoc);
        pDoc->Release();
        m_pDisp = NULL;//Reset glpDisp
    }
}

BOOL CMFCHtmlDlg::CanAccessExternal()
{
    return TRUE;
}

3.在html网页中添加C/C++调用的接口

4.在MFC工程中添加调用接口

BEGIN_DISPATCH_MAP(CMFCHtmlDlg, CDHtmlDialog)
	DISP_FUNCTION(CMFCHtmlDlg, "HtmlShowJson", CallCplusplus, VT_EMPTY, VTS_UI2)
END_DISPATCH_MAP()
HRESULT CMFCHtmlDlg::CallCplusplus() {
	CSimpleArray<CComBSTR>  paramArray;
	CString msg;
	CComVariant r;
	msg.Format("hello,from C/C++");
	paramArray.Add(msg.GetBuffer());
	pCallScript.Run("HtmlShowJson", 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);
		if (AfxMessageBox(strValue, MB_YESNO) == IDYES) {

		}
	}
	else {
		CString strMsg = "HtmlShowJson Error!";
		if (AfxMessageBox(strMsg, MB_YESNO) == IDYES) {

		}
	};
	return S_OK;
}

5.设置确认按键触发调用

HRESULT CMFCHtmlDlg::OnButtonOK(IHTMLElement* /*pElement*/)
{
	CallCplusplus();
	return S_OK;
}

6.运行结果


总结


以上就是今天要讲的内容,本文仅仅简单介绍了在MFC中基于JavaScript的使用,而html提供了大量能使我们快速便捷地处理界面的优美布局。


http://www.kler.cn/a/435.html

相关文章:

  • 强大且灵活的终端工具Tabby的强大功能与详细配置指南
  • 前端工作中问题点拆分
  • openjdk17 从C++视角看 String的intern的jni方法JVM_InternString方法被gcc编译器连接
  • Redis热点数据管理全解析:从MySQL同步到高效缓存的完整解决方案
  • 畅捷通T+13管理员密码任意重置漏洞
  • cudnn版本gpu架构
  • 2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。
  • 计算机网络面试总结
  • 【C++】STL简介 及 string的使用
  • 爽,我终于掌握了selenium图片滑块验证码
  • 程序是怎样跑起来的(2)
  • JS中sort()方法返回值?
  • 高等数学——二重积分
  • 【JDK动态代理】及【CGLib动态代理】:Java的两种动态代理方式
  • 全网独家首发|极致版YOLOv7改进大提升(推荐)网络配置文件仅24层!更清晰更方便更快的改进YOLOv7网络模型
  • Linux中sudo,su与su -命令的区别
  • Qt之高仿QQ系统设置界面
  • springboot vue3 前端调用后端接口 传参问题
  • 每天学一点之Lambda表达式
  • 算法刷题总结 (四) 动态规划
  • 计算机组成原理(2.1)--系统总线
  • 关于ES6新特性的总结
  • Python基础—面向对象(超详版)
  • 理清gcc、g++、libc、glibc、libstdc++的关系
  • 乐吾乐2d可视化之智慧城市可视化(二)
  • UE实现建筑生长(材质遮罩方式)效果