用VS2019开发一个简单的ActiveX(MFC)控件
程序员文章站
2024-03-15 23:13:12
...
一、创建控件
- 管理员身份运行VS2019
- 创建一个新的项目:模板为 MFC ActiveX 控件
- 创建新项目:testActiveX
- 直接下一步
- 勾选:在“插入对象”对话框中可用
- 打开项目属性
- 修改项目属性:MFC的使用修改为【在静态库中使用MFC】
二、添加界面显示
- 在 资源视图 中插入对话框
- delete 掉 【确定】【取消】,然后修改對話框屬性:
Border改為None,
Control改為Ture,
ID改為IDD_MAIN_DIALOG
Style改為Child
System改為False
Visible改為True
- 拖拽一个 Edit Control 过来,调整好自己喜欢的大小
- 双击对话框:Dialog,为该对话框添加一个类
- 在testActiveXCtrl.h中添加:CMainDlg m_ctrldlg
- 修改 onDraw 如下图
- 类视图下面,点击类向导(Z)
- 在”消息“栏下选择 WM_CREATE,然后点击右边”添加处理程序“。注意图中的其它设置。
- vs2019自动添加的代码还需要手动添加一条:m_ctrldlg.Create(IDD_MAIN_DIALOG, this);
- 至此为止,基本框架改动处一共有:
testActiveX.h 一处 #include “resource.h”
testActiveXCtrl.h 三处
①#include “CMainDlg.h”
②CMainDlg m_ctrldlg;
③afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
testActiveXCtrl.cpp 三处
①ON_WM_CREATE()
②// TODO: 用您自己的绘图代码替换下面的代码。
//pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//pdc->Ellipse(rcBounds);
m_ctrldlg.MoveWindow(rcBounds, TRUE);
③m_ctrldlg.Create(IDD_MAIN_DIALOG, this);
可以点击重新生成解决方案了,如果未报错,说明ActiveX控件已在本机中
- 最后,找到一个ID,在testActiveX.idl文件的最后面,uuid()
将该ID,替换下面htm文件中的classid
<HEAD>
<TITLE>Test ActiveX</TITLE>
</HEAD> <OBJECT ID="testActiveXCtrl" WIDTH=528 HEIGHT=77 classid="CLSID:f3a0202e-17ce-4558-9b06-3144d9021849">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="12806">
<PARAM NAME="_ExtentY" VALUE="1747">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
</HTML>
- 然后用IE浏览器打开该htm文件,就可以看到ActiveX控件的提示了,如果成功了,将会是这样
三、添加接口及web调用
- 在类视图添加方法
- 参数设置如下
- 手动添加的代码
CMainDlg.h 添加:
LONG SetParam(LPCTSTR lpParam);
testActiveXCtrl.h 添加:
protected:
//LONG SetCrtlParam(BSTR param);
LONG SetCrtlParam(LPCTSTR param);
CMainDlg.cpp 添加
LONG CMainDlg::SetParam(LPCTSTR lpParam) {
CString strParam(lpParam);
SetDlgItemText(IDC_EDIT_OUTPUT, _T("ActiveX处理后为:") + strParam);
return 1;
}
testActiveXCtrl.cpp中添加
//LONG CtestActiveXCtrl::SetCrtlParam(BSTR param)
//{
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
//
// // TODO: 在此处添加分派处理程序代码
// m_ctrldlg.SetParam(param);
//
// return 0;
//}
LONG CtestActiveXCtrl::SetCrtlParam(LPCTSTR param)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此处添加分派处理程序代码
m_ctrldlg.SetParam(param);
return 0;
}
- 至此,重写生成解决方案即可!测试html如下。
<HEAD>
<TITLE>Test ActiveX</TITLE>
</HEAD>
<BODY>
<input type="button" value="接口测试" id="btnOK" onclick="SetParam();"></input>
</BODY><OBJECT ID="testActiveXCtrl" WIDTH=528 HEIGHT=66 classid="CLSID:f3a0202e-17ce-4558-9b06-3144d9021849">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="12806">
<PARAM NAME="_ExtentY" VALUE="1747">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
<script language="javascript">
function SetParam() {
var sum = testActiveXCtrl.SetCrtlParam("Hello, ActiveX!");
alert(sum);
}
</script>
</HTML>
啊呀,测试了半天为啥不对,原来 ctrl 错写成了 ctrl,又掉了几根头发。。。。
- 测试成功这个样子
上一篇: atl创建avtive
下一篇: 【SharePoint Online】03 将Spfx扩展程序部署到 SharePoint Online站点中(通过Microsoft 365 CDN部署到SharePoint Online站点上)
推荐阅读
-
用VS2019开发一个简单的ActiveX(MFC)控件
-
用PHP开发C/S结构(一个简单的例子)_PHP教程
-
用PHP开发C/S结构(一个简单的例子)
-
用PHP开发C/S结构(一个简单的例子)
-
Python接口自动化测试教程 -- 2. 用Django开发一个简单的POST | GET接口
-
从零开始用Andrid Studio开发一个简单的垃圾分类查询APP
-
用java做一个简单的FTP连接管理模块(ftp软件开发一)
-
用PHP开发C/S结构(一个简单的例子)_PHP教程
-
用java做一个简单的FTP连接管理模块(ftp软件开发一)
-
从零开始用Andrid Studio开发一个简单的垃圾分类查询APP