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 }
#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; }
OCX测试
在vs2010中有ActiveX控件测试容器也可以测试ocx。
资源下载地址:
https://download.csdn.net/download/_/
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230178.html原文链接:https://javaforall.net
