MFC与第三方类库CWebPage开发javascript函数调用示例

2023-05-16

    今天思索一个问题,想着怎么用c++调用百度地图,结果网上有一篇文章介绍了如何使用MFC项目结合CWebPage来调用百度地图。看了整篇博客,思路很清晰,但是看下来,其实就是利用了MFC调用html页面的javascript函数来达到调用百度地图的目的。本质上还是web应用的地图。不是真正意义上的从无到有加载百度地图。自己通篇搞下来,也算是积累了一些经验。我认为这个是一个MFC调用html页面的javascript函数的应用。下面介绍如何一步一步实现MFC调用html页面的javascript函数。

    这里准备工作:   

  1.     你需要安装VC++6.0。
  2.    会一点javascript书写技巧。
  3.    知道如何使用百度地图api。
  4.    知道如何使用MFC。

    接下来进入正题,先创建一个html页面,可以是外部的,也可以是项目里面的,我这里因为使用了百度地图,而且它需要开启一个http服务,否则无法使用百度地图的lbs服务。

    准备html页面

    index.htm

<!doctype html>
<html>
	<head>
		<meta charset="UTF-8"/>
		<title>map</title>
		<style>
			html,body{height:100%;width:100%;padding:0;margin:0;}
			#root{height:100%;}
		</style>
		<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=YcP5EukTHUoFR3oObxdfBHTfA3EUgHET"></script>
	</head>
	<body>
		<div id="root"></div>
		<script type="text/javascript">
			window.onload = function(){
				var map = new BMap.Map("root");
				map.centerAndZoom(new BMap.Point(116.404,39.915),15)
				map.enableScrollWheelZoom()
			}
			
			function getMessage(latitude,longitude){
				return ("纬度:"+latitude+",经度:"+longitude);
			}
		</script>
	</body>
</html>

    这个页面加载了百度地图,我们另外编写了一个getMessage()的函数,其实就是一个测试回调的函数,我们通过MFC结合CWebPage类可以调用就行了,这里的功能很简单,就是返回一个拼接的字符串。 

    进入html文件目录下的命令行,通过python命令开启一个http服务,这样,在浏览器中我们可以通过输入url的方式来访问页面。

     

    浏览器访问页面:

     

    以上是准备工作,下面进入MFC项目的创建以及加载页面,调用页面的javascript函数编码工作。 

    创建MFC工程

   创建工程,第一步选择MFC AppWizard [exe],工程名称随便定义,我这里是GeoDemo

     

   第二步,选择基于对话框的工程:

     

    因为后面需要在对话框中拉出一个浏览器控件,用来加载html页面。创建成功就是这个样子 :

    

    接下来,我们需要修改界面。

     

    接着在界面左侧增加一个浏览器控件,用来加载html页面,在界面右键,选择Insert ActiveX Control:

    

   选择Microsoft Web Browser这个控件,点击OK。

    

   在页面尽量拉宽一点,最后长这个样子:

    

    运行之后,长这样子:

     

    下面开始设置变量,增加处理函数,加载页面,调用回调函数。具体做法是,在界面右键,选择ClassWizard,选择第二个tab页面,对浏览器控件增加一个变量,会有警告:

    

    我们根据提示,需要加入CWebBrowser2的头文件和源文件,直接点击“OK”按钮:

     

    接着,设置变量m_myweb:

     

    我们对经度纬度编辑框也设置变量:

     

    为界面的“调用函数”按钮控件增加响应,在按钮控件上右键选择Events,最后对“单击”事件添加处理函数:

     

    接下来,就是编写代码的时候了,前面主要是拖拽控件,以及设置变量,设置处理句柄。我们在编写代码之前,需要将第三方的CWebPage类库的头文件和源码文件加入到项目中,我这里直接给出来。有两个文件:WebPage.h与WebPage.cpp。

    我们先将他们放在项目路径下:

     

    接着在菜单栏Project->Add To Project->Files选择项目路径下的两个文件:WebPage.h和WebPage.cpp,这两个文件在文末也会给出地址,不用担心上哪下载 。

    我们在源文件GeoDemoDlg.cpp文件中编写我们将要添加的代码,我们需要引入WebPage.h。

     #include "WebPage.h" 

    接着在OnInitDialog()方法中的最后return语句之前,增加一句代码: 

    m_myweb.Navigate("http://127.0.0.1:8000/index.htm",NULL,NULL,NULL,NULL); 

     

    接着在我们的“回调函数 ”按钮处理函数这里(我这里是OnCallback),书写我们通过CWebPage类库调用javascript函数的代码:

void CGeoDemoDlg::OnCallback() 
{
    // TODO: Add your control notification handler code here
    UpdateData(true);
    CWebPage webpage;
    webpage.SetDocument(m_myweb.GetDocument());
    const CString functionName("getMessage");
    CComVariant varResult;
    webpage.CallJScript(functionName,m_latitude,m_longitude,&varResult);
    //varResult.ChangeType(VT_BSTR);
    CString msg;
    msg = varResult.bstrVal;
    MessageBox(msg);
}

    解释一下,我这里是根据输入的经纬度,传给getMessage(m_latitude,m_longitude)函数 ,然后getMessage函数会返回拼接的字符串给MFC,这里再将结果通过MessageBox显示出来。达到了测试回调函数的目的。

    第一次编译运行,加载页面会很慢,需要等待一段时间对话框中的页面才加载出来。

    

    以上代码演示就完成了,最后给出代码的github地址: https://github.com/buejee/GeoDemo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC与第三方类库CWebPage开发javascript函数调用示例 的相关文章

  • docker私有镜像服务搭建

    docker容器技术已经在部署服务上使用的非常普遍 xff0c 主要是它的隔离性以及快速启动的特性 xff0c 一般启动一个容器 xff0c 如果镜像不存在会先去dockerhub仓库下载 xff0c 然后存储在本地 xff0c 后续可以继
  • vs2017开发第一个desktop应用程序

    desktop应用程序也叫窗口程序 xff0c 我们平时在电脑上安装的APP xff0c 都是桌面程序 xff0c 比如QQ xff0c 各种播放器 xff0c 包括浏览器 桌面程序最主要的特点 xff0c 就是点击运行之后 xff0c 会
  • 量子编程入门第一篇环境搭建dotnet-sdk+Microsoft.Quantum.IQSharp+python3.6+qsharp

    量子编程已经提上日程 xff0c 微软提供了quantum开发工具包 Microsoft Quantum Development Kit简称QDK xff0c 在visual studio 2019环境下 xff0c 可以安装quantum
  • ROS2学习笔记(十)-- ROS2 launch启动文件

    简介 xff1a 接触过ROS1的同学对launch肯定不陌生 xff0c 在ROS1中 xff0c 我们常用launch实现node和master同时启动 多节点同时启动配置等功能 xff0c ROS2中的launch也是用于多节点启动
  • 记录一次解决TypeError: 'NoneType' object is not callable的办法

    如题所示 xff0c 这是python运行时报错 xff0c 关键信息就是 xff1a TypeError 39 NoneType 39 object is not callable xff0c 错误栈信息如下 xff1a 有的文章提示 x
  • windows下VC++6.0编写c++程序连接mysql示例

    windows下通过c 43 43 编码连接mysql数据库 xff0c 需要做一些设置 xff0c 因为我们需要连接mysql并执行相关操作 xff0c 需要使用mysql提供的api xff0c 这api在mysql h头文件中定义了
  • windows修改cmd命令行字体

    默认情况下 xff0c windows命令行字体只有两种 xff0c 点阵字体和新宋体 如果你想使用系统自带的其他字体 xff0c 需要更改注册表 这里介绍如何修改 windows系统字体在目录C Windows Fonts 下 xff0c
  • centos7安装与配置DNS服务器

    centos7上安装DNS服务器可以实现域名与IP的双向解析 xff0c 即通过域名可以找到主机IP xff0c 也可以通过IP找到域名 在postfix搭建邮件服务器中 xff0c 需要用到DNS正向解析与反向解析 xff0c 因此DNS
  • springboot项目单元测试

    springboot项目和普通的spring项目一样也可以做单元测试 xff0c 一般是测试service层的方法 xff0c 在进行项目构建的时候 xff0c 需要在springboot默认依赖的基础上 xff0c 再加上spring b
  • ipfs星际文件系统初体验

    ipfs是InterPlanetary File System的简称 xff0c 即星际文件系统 xff0c 他不同于一般的操作系统文件系统 xff0c 也不同于分布式文件系统 xff0c 因为分布式文件系统最终访问文件还是采用的http协
  • truffle构建以太坊应用并测试第一个helloworld智能合约

    最近因为国家对区块链又重视起来了 xff0c 相信今年年底到明年年初会是一个区块链的新的爆发点 xff0c 也是碰巧学习了一下以太坊构建区块链应用 xff0c 以前都是简单的了解 xff0c 并没有实际动手演练 今天趁机会也学习一下区块链
  • docker启动报错:standard_init_linux.go:211: exec user process caused "no such file or directory"

    如题所示 xff0c 根据自己构建的镜像启动docker容器 xff0c 直接退出 xff0c 查看容器日志报错信息 xff0c 没有任何别的信息 网上搜索这个问题 xff0c 发现很多人都遇到过 xff0c 解决办法也各不相同 xff0c
  • windows下telnet回显解决办法

    telnet相信大家都用过 xff0c 在tcp连接中 xff0c 我们可以用来模拟发送客户端请求 xff0c 当我们输入telnet 127 0 0 1 8888连接本机的tcp 8888端口时 xff0c 连接成功后 xff0c 会进入
  • springboot与flyway集成做数据迁移

    flyway是一种用来做数据迁移的框架 xff0c 如果你的项目不是jpa 43 hibenate xff0c 比如使用的mybatis xff0c 那么你需要在实体创建之前 xff0c 在数据库中生成表结构 xff0c 然后逆向工程 xf
  • ROS2学习笔记(十一)-- ROS2 bag数据记录与回放

    简介 xff1a ROS2提供了ros2 bag命令 xff0c 可以记录指定主题的数据到文件中 xff0c 也可以将记录下的内容再发布出来 xff0c 相当于是数据的回放 xff0c 除了通过命令行的方式实现数据记录以外 xff0c 也可
  • C++实现简单链表

    链表是最常用的一种数据结构 xff0c 无论什么语言 xff0c 学习数据结构 xff0c 都绕不开链表 xff0c 下面通过c 43 43 来实现简单链表 xff0c 所谓简单链表 xff0c 就是构建链表 xff0c 然后遍历打印链表
  • 二分查找算法介绍

    二分查找算法的实现过程如下 xff1a 在排序数组中查找某一个数据项 xff0c 首先让待查数据与中间下标元素开始比较 xff0c 如果相等则返回 xff0c 如果小于中间下标元素 xff0c 重新开始从低位开始 xff0c 中间下标 1
  • centos7下安装gitlab-ci持续集成实战

    gitlab提供了ci cd持续集成 持续部署的功能 xff0c 当我们安装了gitlab之后 xff0c 需要单独再安装gitlab ci multi runner xff0c 其实就是gitlab runner xff0c 为了试验 x
  • centos7下安装单机版kubernetes实战

    kubernetes是docker分布式解决方案 xff0c 是当前最火的docker解决方案 xff0c 一般初学者适合玩单机安装 kubernetes安装很简单 xff0c 只需要通过yum安装etcd kubernetes即可 默认k
  • c++使用malloc来做内存分配创建链表

    c 43 43 中创建链表可以直接通过new对象的方式创建节点 xff0c 然后将节点之间的关系通过next指针来关联起来 xff0c 另外 xff0c 也可以通过malloc来分配内存 xff0c 创建节点 这里介绍如何通过malloc来

随机推荐

  • javascript模块化编程commonjs,cmd,amd规范之间的区别

    模块化编程是javascript语言的一个特性 xff0c 其实不光javascript语言有模块化思想 xff0c java9也支持模块化 xff0c 所以说模块化是一种编程的趋势 xff0c 也是一种新的解决方案 模块化编程将我们以前单
  • postgresql开启类似mysql查询语句后面跟\G一样按行展示列数据选项

    通常 xff0c 我们在使用数据库的时候 xff0c 为了让单条记录看着更清晰 xff0c 不会被控制台长度折断 xff0c 会将记录按行来展示 xff0c 在mysql数据库中 xff0c 查询语句后面跟上 G就可以实现这个效果 xff0
  • linuxmint下通过eclipse安装android开发环境sdk,adt并新建与启动项目各种踩坑

    最近安装了linuxmint19 2系统 xff0c 这个系统是ubuntu系列 xff0c 适合桌面操作系统 xff0c 据说比ubuntu好 可以先看看系统的一些特征 xff1a 这里的系统设置 xff0c 很像mac系统 xff0c
  • 安卓手机开启开发者选项

    一般我们将安卓手机通过数据线连接到电脑 xff0c 会提示将手机用于干什么 xff0c 有传输文件选项 xff0c 充电选项 xff0c 开发者调试选项 我们选择充电之后 xff0c 再不会出现这个提示 有的手机开发者选项不会显示在设置界面
  • webpack前端项目构建框架

    前端项目构建框架有很多 xff0c 常见的有grunt xff0c gulp xff0c 为什么还有webpack呢 xff1f 前端构建工具一般都是将js合并压缩 xff0c css合并压缩 xff0c 以达到减少体积 xff0c 提高加
  • 两轮差速小车循线控制原理分析

    硬件资料设定 xff1a 小车驱动来自于两个相同的电机 xff0c 转向依靠两轮差速实现 xff0c 小车前后左右安装超声波传感器 xff0c 前后各一个 xff0c 左右各两个 xff1b 功能目标 xff1a 假设小车左侧有墙壁 xff
  • webpack前端项目构建框架续

    在前一篇文章中 xff0c 介绍webpack构建普通web项目 xff0c 一般而言没有太大的意义 xff0c 我们需要使用webpack构建es6 xff0c react等这些新的语法或者特性的项目 xff0c 因为涉及了很多语法的转换
  • html页面报错Uncaught SyntaxError: Cannot use import statement outside a module

    如题所示 xff0c 在我们学习es6的时候 xff0c 使用export导出模块 xff0c 使用import导入模块的语法时 xff0c 我们需要将我们在html中声明的标签 lt script gt lt script gt 类型ty
  • redux入门示例

    redux是一个将ui与数据操作分离的框架 xff0c 可以与vue或者react配合使用 保证了数据集中修改 xff0c 然后渲染 xff0c 可以防止用户在外部随意修改state状态树 redux利用store来统一管理state xf
  • redux入门示例续

    前面一篇介绍了利用redux框架来实现计数器的例子 xff0c 了解了redux设计思想 xff0c 他将ui响应与数据更改分离 xff0c 集中处理状态变更 xff0c 然后渲染到页面 xff0c 当有用户操作的时候 xff0c ui响应
  • react项目启动报错:Error: ENOSPC: System limit for number of file watchers reached

    如题所示 xff0c 最近在使用npm start启动react项目的时候 xff0c 经常会报这个错误 xff0c 出错原因大致意思是文件监控数量超过了系统限制 其实就是打开的文件过多导致的 xff0c 不管是什么文件 xff0c 只要有
  • Support for the experimental syntax 'decorators-legacy' isn't currently enabled

    如题 xff0c 出现这个错误 xff0c 是因为react项目中使用了 64 语法的装饰器 xff0c 而我们项目的一些配置没有设置正确导致的 为了使用装饰器 xff0c 需要修改如下三处配置 xff1a 1 运行依赖 npm insta
  • react hooks useEffect副作用钩子使用

    react框架开发作为入门 xff0c 我们首先学到的是自定义组件 xff0c 然后编写相关处理逻辑 xff0c 绑定事件等等 一般自定义组件 xff0c 我们是通过编写一个class继承React Component xff0c 然后编写
  • 使用mocha与should库做nodejs单元测试

    nodejs是服务端开发 xff0c 他也可以做单元测试 xff0c 只不过 xff0c 这个单元测试一般是针对某一个文件或者一个模块而言 xff0c 我们经常看到github上的很多项目各自的文件夹中都有很多xxx test js这样的文
  • javascript reduce()方法示例

    reduce在大数据框架mapreduce中是一个合并的过程 xff0c 将所有的数据 xff0c 按照一定的规则合并 xff0c 一步步缩小范围 xff0c 最后合并为一个最大的集合或者对象 在javascript中 xff0c redu
  • 无人驾驶小车调试笔记(六)-- 车轮校准

    简介 xff1a 小车的动力完全来自于两个电机带动的车轮 xff0c 在理想状态下 xff0c 给两个电机同样的驱动参数 xff0c 两个车轮会以同样的转速带动小车直线行驶 xff0c 而实际情况是每个电机可能都会有个体差异 xff0c 也
  • 电力电子技术仿真-单项桥式不可控整流电路(无滤波电容)

    电路模型如下图所示 电路元器件与参数设置如下所示 xff1a Powergui xff1b Linear Transformer xff1b Current Measurement xff1b Voltage Measurement xff
  • git命令行切换到某一个提交版本的分支

    通常 xff0c 我们需要在命令行下切换 分支 xff0c 一般而言 xff0c 我们将远程代码克隆 git clone http xxx com project 到本地之后 xff0c 切换分支使用git checkout b branc
  • linuxmint下gcc编译报错:zlib version 1.2.1 or higher is required

    如题所示 xff0c 在linuxmint系统上通过gcc编译一个工具 xff0c 报错 xff1a 通过dpkg l命令查看系统的zlib库 xff0c 是有zlib1g xff0c 这个就是最新的 很多地方说要安装zlib1g dev
  • MFC与第三方类库CWebPage开发javascript函数调用示例

    今天思索一个问题 xff0c 想着怎么用c 43 43 调用百度地图 xff0c 结果网上有一篇文章介绍了如何使用MFC项目结合CWebPage来调用百度地图 看了整篇博客 xff0c 思路很清晰 xff0c 但是看下来 xff0c 其实就