开发MFC Axtivex控件

step1.项目创建

          

step2.添加外部调用方法

         1.打开类视图,找到下面这个图标,项目名称的这个文件点击右键,添加方法


       2.如果需要字符串参数,请选择BSTR类型,点击添加,确定,如下图


       3.第二部操作在DhCameraCtrl类中除了添加了test方法的声明和实现,还有以下变化



下图是DhCamera.idl文件,这里面添加的方法都是虚函数,微软通过内部的封装,在DhCameraCtrl类中进行了实现


在第三步可以看到我们在添加方法的时候选择的参数类型是BSTR,在声明和实现中却是LPCTSTR,我也不明白

step3.网页方法测试

<span style="font-size:18px;"><html>
<body>
<div class="section">
    <div class="container">
        <div class="content">
            <input type="button" οnclick="clickActive()" value="click">
                <div id="f_ocx" style="top:60px; left:0; width: 963px; height: 631px;">
                    <!--classid step2中第三步标注的CLSID,注意不能丢掉CLSID-->
                    <object id="MfcActivex" width="100%" height="100%" classid="CLSID:A906CABE-B037-4EAC-97FE-2BCBDD0C3CE5"></object>
                </div>
        </div>
    </div>
</div>
<script type="text/javascript">

    function clickActive() {
       var MR = document.getElementById("MfcActivex")
        if (null == MR){
            alert("控件加载失败")
        }else {
          var ret = MR.Login();
            alert(ret)
        }
    }
</script>
</body>
</html></span>

step4.显示MFC页面

         1.DhCameraCtrl.h 中添加 #include"DhCameraPropPage.h"

         2.CDhCameraCtrl类声明中添加

            

             public:
	            CDhCameraPropPage m_mainDlg;
         3.修改绘图函数

            

void CDhCameraCtrl::OnDraw(
			CDC* pdc, const CRect& rcBounds, const CRect& /* rcInvalid */)
{
	if (!pdc)
		return;

	// TODO:  用您自己的绘图代码替换下面的代码。
	//pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
	//pdc->Ellipse(rcBounds);
	m_mainDlg.MoveWindow(rcBounds, TRUE);
}
           4.添加WM_CREATE消息响应函数:项目->类向导,如下图

 

           5.生成OnCreate方法后,添加实现

               

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

	// TODO:  在此添加您专用的创建代码
	m_mainDlg.Create(IDD_PROPPAGE_DHCAMERA, this);
	m_mainDlg.ShowWindow(SW_SHOW);

	return 0;
}

PS:

1.生成的OCX需要进行注册

     以管理员方式启动DOS.EXE,执行下列命令(regsvr32   路径+文件名),此操作将CLSID注册到注册表

     regsvr32  E:\C++Workspace\DhCamera\Debug\DhCamera.ocx

     regsvr32  E:\C++Workspace\DhCamera\Debug\DhCamera.ocx    -u    (取消注册)

2.测试过程中出现控件的MFC界面之前可以显示,后来无法显示,究其原因是连接不到第三方库,如果没有用第三方库就不必理会了

3.添加新的外部方法会添加四处代码,修改外部调用方法也需要修改这四个地方
1)2)声明与定义
3)CDhNetCameraCtrl.cpp
// 调度映射
BEGIN_DISPATCH_MAP(CDhNetCameraCtrl, COleControl)
4).ild文件外部接口


项目结构详细介绍可见



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值