MFC中CHtmlView和JS的相互调用

第一部分:将GOOGLE MAP嵌入到MFC的对话框程序中 <br />目前GPS的应用越来越广泛,因为GPS应用的数码产品也开始尝试结合GOOGLE地球和GOOGLE地图来增加产品的卖点。其中韩国的X-DRIVEN就将DVR的视频文件与GPS轨迹同步播放,用户在浏览视频的同时也能形象的看到汽车在GOOGLE MAP的实时轨迹。仔细研究发现其实就是将浏览器与视频播放器结合起来的应用程序。<br />  视频播放器可以采用在LINUX下流行的MPLAYER,将IE浏览器嵌入到应用程序中,最后实现视频播放与GPS轨迹文件在GOOGLE MAP同步。本人采用VC2005实 阅读详情

没废话,直接上步骤:


1、创建一个继承自CHtmlView的类;
2、构造函数中添加

CNewHtmlView::CNewHtmlView()
{
	// 允许自动化
	EnableAutomation();
}

3、重载 virtual HRESULT OnGetExternal( LPDISPATCH *lppDispatch); 

HRESULT CNewHtmlView::OnGetExternal( LPDISPATCH *lppDispatch )
{
	// 返回自身的IDispatch接口
	*lppDispatch = GetIDispatch(TRUE);
	return S_OK;
}

// JS调用C++部分
4、头文件中添加宏

DECLARE_DISPATCH_MAP

类似DECLARE_MESSAGE_MAP,具体自己Google
5、.cpp中添加接口映射

// 添加供JS调用的函数
BEGIN_DISPATCH_MAP(CNewHtmlView, CHtmlView)
	DISP_FUNCTION(CNewHtmlView, "CB_FunctionInsallApp", CB_FunctionInsallApp, VT_EMPTY, VTS_DISPATCH)
	DISP_FUNCTION(CNewHtmlView, "CB_FunctionTryPlay", CB_FunctionTryPlay, VT_EMPTY, VTS_DISPATCH)
END_DISPATCH_MAP()
// 实现
void CNewHtmlView::CB_FunctionInsallApp(IDispatch *pDispVal)
{
	CComDispatchDriver spData = pDispVal;
	CComVariant varProperty;
	spData.GetPropertyByName(L"PropertyName",&varProperty)
}

说明:DISP_FUNCTION(CNewHtmlView, "JS中调用的函数名", C++中对应的函数名称, 返回值, 参数[多个参数以空格隔开,VTS_DISPATCH一般作为结构体参数])
获取结构体内容
6、调用js函数

HRESULT CNewHtmlView::OnInvokeJS( WPARAM wParam, LPARAM lParam )
{
	// 组织参数
	CArray<CComVariant, CComVariant &> _param;
	_param.Add( CComVariant("123" ));
	_param.Add( CComVariant( "456"));
	CComQIPtr<IHTMLDocument2> _document;
	m_pBrowserApp->get_Document( (IDispatch **)&_document );


	CComDispatchDriver _script;
	_document->get_Script(&_script);


	_script.InvokeN("js中函数名称", &_param[0], param.GetCount());
	return S_OK;
}

搞定,收工~!
MFC集成WebBrowser控件实战:从基础创建到C++/JS双向通信 在Windows桌面开发中,将Web内容嵌入原生应用是常见的需求,这通常通过浏览器控件实现。其核心原理是利用操作系统提供的浏览器渲染引擎,在应用窗口中创建一个可交互的网页容器。这项技术的价值在于能够融合Web的动态内容、丰富交互与原生应用的系统级能力,实现混合应用开发。典型的应用场景包括内嵌报表展示、在线文档查看、地图集成以及需要Web界面但又要调用本地功能的客户端程序。本文聚焦于MFC框架,深入探讨了如何集成经典的WebBrowser控件,涵盖了CHtmlView与手动创建两种方案,并详细解析了C++与J 阅读详情

相关推荐

基于MFC的CHtmlView网页集成应用实战项目

MFC(Microsoft Foundation Classes)是基于Windows API封装的C++类库,通过封装窗口、消息、控件等系统对象,极大简化了传统Win32应用程序的开发复杂度。其核心机制之一是消息映射(Message Map),取代了繁琐的WndProc回调函数,使事件处理更符合面向对象的设计范式。在MFC众多视图类中,CHtmlView是一个关键组件,它继承自CFormView。

weixin_36122351的博客 957

MFC对话框里利用CHtmlView加载界面(一)————加载网页

简单了解下CHtmlView类,CHtmlView类是MFC类,它继承自CView,属于MFC视图类。 但我们看它的具体实现时,我们会发现其最大的本质在于IWebBrowser2(WebBrowser ActiveX 控件)的封装。即其实质是:利用IWebBrowser2,有效地使应用程序成为一个 Web 浏览器。当然里面具体的封装细节,涉及到了大量的COM组件和ActiveX 控件知识

qq_20828983的博客 8332

MFC对话框里嵌网页,C++和JS互相喊话的实操工程

在MFC对话框程序中直接加载HTML页面,用CHtmlView作为宿主容器,实现C++与JavaScript双向通信。登录页、注册页、首页三个HTML页面均带配套CSS样式和背景图,支持从C++端调用JS函数(比如statusLine.js里的状态更新、statusPie.js中的饼图渲染),也支持JS通过window.external调用MFC暴露的接口。底层由BaseHtmlView和DocHostSite类封装核心逻辑,MyOleDropTarget类额外提供网页区域的OLE拖放功能。工程保留了.js

a0b1c2d3的专栏 202

MFC对话框里利用CHtmlView加载界面(四)————分层窗口设置

在学会了 利用CHtmlView 在MFC对话框上显示网页,并支持JavaScript 和 MFC 之间的互相通信后。 当然就想: 我们为什么不能只用HTML 作为前端界面, 而底层用MFC实现逻辑呢? 这样就完全不需要用到MFC对话框的界面风格了。 本文就讲告诉大家如何实现 用HTML代替MFC的对话框界面。

qq_20828983的博客 6404

MFC对话框中实现网页显示功能详解

MFC(Microsoft Foundation Classes)是一套基于C++的面向对象类库,封装了Windows API,极大地简化了Windows桌面应用程序的开发流程。其核心架构围绕文档/视图模型、消息映射机制和UI组件封装展开,适用于中大型原生应用开发。ActiveX控件基于COM(组件对象模型)技术构建,具备高度可复用性与交互性,广泛用于嵌入网页内容或第三方功能模块。在MFC项目中集成ActiveX控件,如Web浏览器控件,可以实现原生应用与HTML内容的无缝融合。

weixin_36064575的博客 879

基于CHtmlView的网页浏览器

具备浏览器的基本功能,使用CDialogBar实现地址栏,在状态栏中添加进度条,使用SliderCtrl控制网页缩放

MFC界面--利用CHtmlView和HTML制作新风格的界面(包括CView和Dialog)

一、文档视图形式,以一个视图cview(chtmlview)作为首页界面 转自:http://liuxiang031130.blog.163.com/blog/static/1176665520111117914849/ 用过 Outlook Express 的很多人都对其第一页的 HTML 界面感到新奇,很明显这是使用 DHTML 技术,加入了一些 Java Script 的一个网页,但它能

Wait的专栏 1万+

CHTMLView(简单浏览器)设计

CHTMLView(简单浏览器)设计,输入网站,访问,刷新,停止返回

【MFC】WebBrowser或CHtmlView中轻松屏蔽脚本错误(JavaScript)

JavaScript脚本错误包含“运行时错误”和“语法错误”。

qq_43331089的博客 521

关于CHtmlView的简单应用关于CHtmlView的简单应用

关于CHtmlView的简单应用关于CHtmlView的简单应用关于CHtmlView的简单应用关于CHtmlView的简单应用关于CHtmlView的简单应用关于CHtmlView的简单应用

mfc 利用htmlview类 实现内嵌浏览器 并控制网页只在当前页面弹出

mfc 利用htmlview类 实现内嵌浏览器 并控制网页只在当前页面弹出,mfc完美封装一个简易浏览器实现

CHtmlView或IE控件调用js的方法

在MFC应用程序中直接使用ie控件或者CHtmlView方式内嵌网页时,有时候需要mfc程序调用网页的js函数。 结合自己的实际操作,总结一下,以备用。 我用的一个第三方类CWebPage(网上搜索很多地方可以下载) // MFC代码(IE控件的方式)CWebPage WebPage; CComVariant varResult;//存放调用JavaScript函数返回的返回

xq830210的专栏 1688

在c++中调用Javascript(MFC源码)

在c++中调用Javascript(MFC源码),能够遍历页面中的JS元素,并能够调用其中的JS方法,相当强大!

MFC对话框里利用CHtmlView加载界面(二)————MFC调用JaveScript

在MFC对话框里利用CHtmlView加载界面(一)中,对如何利用CHtmlView加载网页进行了介绍。 本文,我们将在上一篇文章的基础上,对如何利用CHtmlView加载HTML,以及MFC如何调用JaveScript的方法进行讲解。 在MFC对话框里利用CHtmlView加载界面(一)中,我们新建了一个继承自CHtmlView的CBaseHtmlView类,本文我们将继续在CBaseHtm

qq_20828983的博客 3096

调用IP核、移植/复制IP核以及解决IP核被锁住/红锁问题(基于vivado)

解决不同工程IP核之间复制调用以及IP核红锁问题,让开发更简单!

weixin_44502554的博客 1万+

USB 3.0 Rx Detect之超速U盘的识别

USB 3.0 Rx Detect之超速U盘的识别

汽车以太网和SOA 2万+

MFC对话框里利用CHtmlView加载界面(三)————JaveScript 调用 MFC

在 MFC对话框里利用CHtmlView加载界面(二)———— MFC 调用 JaveScript 中,我们实现MFC对JaveScript方法的调用。 现在我们想既然MFC能调用JaveScript,那么又该如何实现JaveScript调用MFC呢? 只有MFC 能和 JaveScript 实现互相调用,那我们完全就可以将HTML作为我们的界面,将MFC作为我们底层逻辑的处理,实现漂亮的界

qq_20828983的博客 1646

软考中级-软件设计师 知识点整理(一篇就过了 建议收藏)

软考中级-软件设计师上午题知识点总结

片言可决讼,半纸能缚龙 17万+

MFC使用CHtmlView实现js与dialog的交互

类CBaseHtmlView // BaseHtmlView.cpp : 实现文件 // #include "stdafx.h" #include "HtmlDialog.h" #include "BaseHtmlView.h" // CBaseHtmlView IMPLEMENT_DYNCREATE(CBaseHtmlView, CHtmlView) ///////////////////////// 实现 JS 调用 Cpp begin ////////////////// // 例如:

htj10的博客 657

uniapp [安卓苹果App端] - 实现获取请求手机位置权限+开启定位获取经纬度/省市区地址等,检测权限手机定位是否开启并引导用户同意授权,uniApp app端调用本机开启本机定位权限及IP属地

uni-app,手机定位权限,安卓Android,苹果ios,uniapp获取本机位置权限,uni-app获取用户定位数据,uniapp APP获取用户IP属地定位,判断权限,权限被拒绝了怎么办,苹果ios系统无法开启定位,获取定位权限报错,uniapp定位获取省市区,UNI-APP如何开启手机定位功能并获取经纬度,不依赖地图第三方插件组件,打包上架后如何获取,真机运行无法获取定位,安卓和ios权限获取,判断权限检查,正式打包,详细教程,根据获取当前经纬度,再根据经纬度去定位具体省市区,自定义基座打包能成功

🏆 前端领域优质创作者 1万+

告别第三方控件!C#实现OPC UA客户端,对接工业设备超简单

C#实现OPC UA客户端无需依赖第三方商业控件,通过快速起步:通过NuGet安装,使用模拟器完成前期开发测试;复用性强:封装通用工具类,支持连接、读写、订阅等核心功能,可直接集成到各类上位机项目;界面友好:通过WinForm绑定工具类,实现可视化操作,适配工业现场人员使用;工业适配:支持安全配置、身份验证,联调步骤清晰,可快速对接西门子、欧姆龙等主流工业设备;稳定性高:具备资源释放、异常处理、线程安全UI更新等特性,满足工业7×24小时运行要求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1363

使用mfc CHtmlView内存泄露解决方法

第一步,谷歌有文章说CHtmlView部分api使用BSTR没释放: 解决方法是重写一下接口: CString GetFullName() const; CString GetFullName() const; CString GetType() const; CString GetLocationName() const; CString GetLocationURL() con...

weixin_30839881的博客 421

【数据集】中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

WW、forever的博客 2595

利用 CHtmlView 和 HTML 制作新风格的界面

用过 Outlook Express 的很多人都对其第一页的 HTML 界面感到新奇,很明显这是使用 DHTML 技术,加入了一些 Java Script 的一个网页,但它能够和应用程序进行交互操作。其实利用 VC6.0 的新加入的 MFC 类 CHtmlView ,你也可以实现这样一个令人激动的程序界面。这个界面可以利用 HTML ,这是很有意义的,想象一下,你在 HTML 中实现的效果,全

pirate97的专栏 811

044、镜头脏污与异物检测:产线 AOI 检测方案与 ISP 脏污补偿

文章摘要(148字) 本文针对镜头生产中的脏污检测问题,提出产线AOI检测与ISP补偿结合的解决方案。产线端采用明场、暗场、偏振三通道联合检测技术,将油污漏检率从8.3%降至0.2%。ISP端通过RAW域局部梯度分析和频域补偿算法,动态修复产线漏检的微小脏污。作者结合实战案例,详细分析了传统灰度阈值法的局限性,并给出多模态检测的代码实现要点,强调必须建立"产线拦截+终端补偿"的双重防护机制。

sundong_81的博客 228

【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解

SpringBoot整合LangChain4j实现RAG检索实战详解

congge 1万+
上一篇: C,C++中使用可变参数[va_list、va_start(),va_end()和va_arg()]
__Andy
博客等级 码龄14年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值