1、编译失败的解决方案
需要用管理员权限的cmd注册
测试:新建一个MFC对话框程序
1、工具箱添加ActiveX控件,菜单“工具”-》“选择工具箱项”
选择“COM组件”,在你想要选择的控件上面打钩
工具箱最下面就多了对应ActiveX控件
拖到界面效果如下:
笔者按:但是这样的办法有个弊端,电脑必须得安装注册这个ocx控件,不然对话框exe就打不开了。
2、动态加载ActiveX控件方式
类向导 Ctrl + Shitf + x
动态创建ActiveX控件代码,最后这个是控件id,自己定义一下,只要不和mfc自动创建的id冲突即可
对话框头文件
private:
CDMFCActiveXControl1 m_xtxApp;
对话框cpp文件
BOOL CTestActivXDlg::OnInitDialog()
{
m_xtxApp.Create(_T("MFCActiveXControl1"), _T(""),WS_CHILD | WS_VISIBLE,CRect(0,0,0,0),
this, xtxCOMID);
}
#define xtxCOMID 3004
笔者按,动态加载的办法比较好做不同版本的兼容,按需加载ActiveX控件
3、测试ActiveX控件的事件
添加ActiveX控件事件有个bug,必须加了标准事件后,自定义事件在可视化添加响应函数才会出现
1)方法一,可视化添加办法,有普通控件一样,没什么区别 。
2)手动添加
头文件
public:
DECLARE_EVENTSINK_MAP()
void OnSendMfcactivexcontroctrl1();
注意前面不能加afx_msg,笔者一开始加了,发现事件一直响应不了
添加映射
BEGIN_EVENTSINK_MAP(CTestActivXDlg, CDialogEx)
ON_EVENT(CTestActivXDlg,xtxCOMID /*IDC_XTXAPP1*/, 1, CTestActivXDlg::OnSend, VTS_NONE)
ON_EVENT(CTestActivXDlg, IDC_MFCACTIVEXCONTROCTRL1, DISPID_CLICK, CTestActivXDlg::OnSendMfcactivexcontroctrl1, VTS_NONE)
END_EVENTSINK_MAP()
void CTestActivXDlg::OnSendMfcactivexcontroctrl1()
{
int b;
b = 3;
}