MFC使用网页做界面(通过JS与webbrowser交互)
最近修改老旧的MFC项目,用的网页做界面,和HTML交互采用的是COM方式,繁琐,丑陋又性能低下,于是考虑利用js来进行界面交互,查了一天的资料,现在整理如下,供后来需要的人参考,虽然大概几乎不会有人用MFC来做项目了(笑),用winform或者WPF或者网页做界面,高性能部分用C++封装的dll也许是更好的选择,当然直接在exe里面提供http访问接口是最吼的(go语言赛高)!界面这个是比较大的话题,可以开个专题慢慢说了。。。
核心的一个CWebPage类是一个老外写的,封装了js的COM操作,用来和webbrowser进行js调用,但是只能调用已经存在的js代码,有时需要自己向网页注入一些js函数(你懂的),你可以在一个空白页上面,用js生成整个页面。
IHTMLDocument2* pHTMLDoc = (IHTMLDocument2*)web.get_Document(); if(pHTMLDoc != NULL) { IHTMLWindow2* pHTMLWnd; pHTMLDoc->get_parentWindow( &pHTMLWnd ); if (pHTMLWnd != NULL) { CString js_code; js_code="function test(str){ alert(str);return str;}";//此次为实际写入的javascript代码 //js_code.Format(L"goToLocation('%s');",JScode);//JS函数名+参数 VARIANT ret; pHTMLWnd->execScript(js_code.AllocSysString(), L"Javascript", &ret);//执行javascript代码 pHTMLWnd->Release(); CWebPage page; page.SetDocument(web.get_Document()); CComVariant varResult; page.CallJScript("test","123",&varResult); MessageBox(CString(varResult.bstrVal)); } pHTMLDoc->Release(); }
先向网页注入(这样听上去比较高大上)一个js函数(代码只是方法之一,还有其他的方法就不列举了),然后通过webpage封装的方法调用函数并返回值,这样做的会比C++用COM接口操作网页简单而且速度更快(并没有测试,理论上应该是这样)
这里只是解决MFC调用js,js调用MFC比较复杂也就没有去深入,COM这种东西感觉真的是上古遗物了,项目里使用的是截获网页的跳转地址来判断需要进行的操作,基本上已经足够了,记得winform里的webbrowser和js互相调用是将对象封装成一个com对象暴露给webbrowser。
源码:下载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?