VS2015 MFCActiveX使用对话框调用另外一个ActiveX控件

MFCActiveX控件的用途广泛,生成的文件就是在网页编程里使用比较多的OCX控件,在网页的object标签里可以调用OCX控件。那么比如我想制作一个OCX控件,在控件里加载一个网页这种该如何实现了。熟悉MFC的应该知道,MFC里可以直接使用webbrowser这个ActiveX控件,使用webbrowser可以很方便的加载网页。下面讲解该如何实现这一功能。
首先使用vs2015,新建一个MFCActiveX工程。
在这里插入图片描述
改变工程的模式为Release模式,修改项目的属性,mfc的使用为在静态库中使用MFC。首先我们需要新建一个对话框,因为webbrowser控件必须要用容器装起来,因此需要新建一个对话框来装这个webbrowser控件。在资源视图里添加一个对话框。
在这里插入图片描述
修改对话框的属性Visible为True,Style为Child,Border为None,一定要注意将对话框的可见性为真,要不然加载的时候只会看到控件为一个圆形线,并删除对话框上的确定和取消按钮,在对话框上右键添加ActiveX控件,选择webbrowser控件。最终如下图所示:
在这里插入图片描述
我们先为对话框添加一个类,类名为CDialog1,然后右键对话框中的webbrowser控件,添加变量m_web,在类向导中添加对话框的初始化虚函数OnInitDialog(),
在这里插入图片描述
在初始化函数中添加webbrowser控件加载的网页:

BOOL CDialog1::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此添加额外的初始化
	m_web.Navigate(L"https://www.baidu.com/", NULL, NULL, NULL, NULL);

	return TRUE;  // return TRUE unless you set the focus to a control
				  // 异常: OCX 属性页应返回 FALSE
}

对话框类全部实现好了,接下来需要将这个对话框加载到自己制作的MFCActiveX控件里。在CMFCActiveXTestCtrl的.h文件里首先引入对话框的头文件
然后在public里新建对话框的变量:
CDialog1 m_dialog1;

#pragma once
//引入对话框头文件
#include"Dialog1.h"
`//并在类中定义对话框的变量:
public:
	//定义对话框的变量
	CDialog1 m_dialog1;

然后在类向导中为CMFCActiveXTestCtrl添加两个消息函数OnCreate和OnSize这两个消息函数里添加相应加载对话框的代码:

int CMFCActiveXTestCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (COleControl::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	m_dialog1.Create(IDD_DIALOG1, this);

	return 0;
}


void CMFCActiveXTestCtrl::OnSize(UINT nType, int cx, int cy)
{
	COleControl::OnSize(nType, cx, cy);

	// TODO: 在此处添加消息处理程序代码
	RECT activeRect;
	GetClientRect(&activeRect);
	m_dialog1.MoveWindow(&activeRect);

}

完成上面的步骤我们就将一个包含有ActiveX控件(webbrowser控件)的对话框嵌入到我们自己的ActiveX控件里了。如果这个时候你以为就大功告成了,那就错了。因为你会发现在调用这个自己创建的ActiveX控件时,无法显示内部嵌入的webbrowser控件。这是因为MFC ActiveX默认情况下不支持嵌入另外一个ActiveX控件,我们需要加这样一行代码。在CMFCActiveXTestApp 类的InitInstance()函数里添加控件包容器代码:

BOOL CMFCActiveXTestApp::InitInstance()
{
	BOOL bInit = COleControlModule::InitInstance();

	if (bInit)
	{
		// TODO:  在此添加您自己的模块初始化代码。
		//添加控件包含器,不然在对话框中不能显示控件
		//添加控件包容器
		AfxEnableControlContainer();

	}

	return bInit;
}

我们注意到MFCActiveXTestLib有个类信息,这个ID就是OCX的调用ID,一会在网页中调用时需要用到这个数字。
在这里插入图片描述
我们编译这个工程,会自动生成一个ocx控件并自动注册,如果没有成功注册,可以自己手动注册,具体怎么注册去网上查。下来讲讲如何调用这个ActiveX也就是注册的OCX。我们新建一个html文件,文件里内容如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta charset="utf-8">
<title>OCX测试</title>
<script src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js">
</script>
<script>
$(document).ready(function(){
  $("button").click(function(){
     myocx.lxStr='hello world';
	 
  });
});
</script>

</head>
<body>
<button>点我</button>
<div  align="center">
<object id=myocx border=0 classid=CLSID:FC6E3C4A-EE76-441C-9B6E-25D0F0425800 width="500" height="300";>
</object>
</div>
</body>
</html>

网页中object中classid后面的数字就是自己创建的ocx控件的类信息后面的数字。
然后将这个html网页用IE打开,效果如下图所示:
在这里插入图片描述

在vs2010中有ActiveX控件测试容器也可以测试ocx。

资源下载地址:

https://download.csdn.net/download/qq_37781464/10862087

vs2010 中添加 ActiveX Control Test Container工具(转载) vs2010中的TSTCON( ActiveX Control Test Container )工具非自动安装,而是作为一个例程提供。所以应找到该例程,并编译: 如vs2010安装在默认路径则 1, 进入:C:\Program Files\Microsoft Visual Studio 10.0\Samples\1033,可找到VC2010Samples.zip文件, 2, 将其解决到同一个文件夹,解压后将出现一个C++子文件夹。 3, TstCon例程在:C:\Program Files\Microsoft Visual Studio 10.0\Samples\1033\C++\MFC\ole\TstCon,双击其中的.sln文件启动工程,直接编译, 4, 编译后在Debug子文件夹中将出现一个TstCon.exe文件,将其复制到:C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools文件夹。 5, 在vs2010中的Tools菜单点击“External Tools...”,出现如下对话框,点击“Add”添加一项工具。 6, 新工具项的"Title"为:ActiveX Control Test Container,"Command"为:C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\TstCon.exe。 7, 确认退出对话框,Tools菜单将出现“ActiveX Control Test Container”菜单项。完毕! 同理在2015安装目录下找到并编译: 但是编译的时候需要区分win32和x64的不同平台生成的工具 分别添加 ActiveX Control Test Container 32和 ActiveX Control Test Container 64的工具,因为不同工具显示的是不同平台注册的com组件,比如你注册一个32位的com组件,此时只能用ActiveX Control Test Container 32测试,而在ActiveX Control Test Container 64中是找不到这个com组件的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keras深度学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值