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

13 篇文章 1 订阅

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

  • 3
    点赞
  • 1
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页

打赏作者

Keras深度学习

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值