VS2019 开发 MFC ACtivex (OCX)控件

需求:

js调用ocx方法,传递字符串到ocx控件中显示

操作步骤:

一、新建 ocx 项目

二、填写项目信息

三、完成项目创建

四、修改项目属性

打开  项目属性  ->  链接器  ->  常规  ->  逐用户重定义  改为  是

 

五、打开资源视图,创建 dialog

六、修改 dialog 属性

边框 改为  None

样式 改为 child

可见 改为 True    (*:必须设置成可见,不然网页中看不见这个窗口)

七、添加一个  edit 控件,用来和网页做交互

八、双击 dialog,添加类文件,基类(CDialog)

九、给新建的 test 类添加一个方法,用来和网页交互,网页传递数据过来,ocx进行显示

test.h

public:
    long myShow(BSTR text);

test.cpp

long Test::myShow(BSTR text)
{
    SetDlgItemText(IDC_EDIT1, text);
    return 0;
}

十、在类视图中,打开类向导,添加  create 消息,双击添加到现有处理程序,确认

 

十一、操作 MyOCXCtrl 类

MyOCXCtrl.h

#include "Test.h"

public:
    Test tt;

MyOCXCtrl.cpp

// CMyOCXCtrl::OnDraw - 绘图函数
void CMyOCXCtrl::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);
    tt.MoveWindow(rcBounds, TRUE);
}
int CMyOCXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (COleControl::OnCreate(lpCreateStruct) == -1)
        return -1;

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

十二、在类视图中,添加一个方法,给网页调用

十三、在 MyOCXCtrl 类中完善添加的方法

MyOCXCtrl.cpp

LONG CMyOCXCtrl::addEditText(BSTR text)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    // TODO: 在此处添加分派处理程序代码
    tt.myShow(text);
    return 0;
}

十四、生成,然后注册ocx

reg.bat

cd /d %~dp0
regsvr32 ./xxx.ocx

十五、编写 HTML 进行测试

classID  是  MyOCX.idl 文件中 最后一个 uuid  (CMyOCXCtrl 的类信息)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <object id="Test" classid="CLSID:d75dee6b-c9a5-4bcb-9644-ce39c033a228" width="400" height="300">123</object>
    <button onclick="test()">test</button>
    <script>
        function test(){
            Test.addEditText("hahaha")
        }
    </script>
</body>
</html>

完结!

原文地址:https://www.cnblogs.com/shiyixirui/p/15397248.html