本文主要是介绍(转发)ActiveX控件编写(OCX),及属性页访问控件类对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文地址:ActiveX控件编写(OCX),及属性页访问控件类对象
ActiveX控件编写:
由MFC向导直接生成ActiveX控件。编译即可得*.ocx控件。并注册到系统。
1.如需显示自定义对话框:
// <span style="font-family: Arial, Helvetica, sans-serif;">CMyCtrl</span><span style="font-family: Arial, Helvetica, sans-serif;">消息处理程序</span>int <span style="font-family: Arial, Helvetica, sans-serif;">CMyCtrl</span>::OnCreate(LPCREATESTRUCT lpCreateStruct)
{if (COleControl::OnCreate(lpCreateStruct) == -1)return -1;// TODO: 在此添加您专用的创建代码m_dlgMain.Create(IDD_DLG_MAIN,this);<span style="color: rgb(0, 204, 204); font-family: Arial, Helvetica, sans-serif;">//创建</span>m_dlgMain.ShowWindow(SW_SHOW);return 0;
}
void CMyCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{if (!pdc)return;// TODO: 用您自己的绘图代码替换下面的代码。m_dlgMain.m_strTitle = m_StrTitleName;<span style="color: rgb(0, 204, 204); font-family: Arial, Helvetica, sans-serif;">//更改标题</span>m_dlgMain.MoveWindow(rcBounds);<span style="color:#00cccc;">//将自定义对话框Move到该控件视即可</span>
}
2.属性页添加属性持久化及获取
CMyCtrl* CMyPropPage::GetControlClass()//获取控件类指针,这是微软官方给的代码
{CAlarmsDisplayCtrl *pMyCtrl;ULONG Ulong;// Get the array of IDispatch pointers that is stored in the property page.LPDISPATCH FAR *lpDispatch = GetObjectArray(&Ulong);// Get the CCmdTarget object that is associated with any one of the previous// array elements.pMyCtrl = (CAlarmsDisplayCtrl*)FromIDispatch(lpDispatch[0]);// Cleanupreturn pMyCtrl;
}
void CMyPropPage::DoDataExchange(CDataExchange* pDX)
{if(pDX->m_bSaveAndValidate==0)//初始化,load{// Get the array of IDispatchs stored in the property pageCMyCtrl *pCtrl = GetControlClass();if (pCtrl){m_strTitle = pCtrl->m_StrTitleName;}}DDP_PostProcessing(pDX);DDX_Control(pDX, IDC_EDIT_TITLE, m_edtTitle);DDP_Text(pDX,IDC_EDIT_TITLE,m_strTitle,_T("StrTitleName"));DDX_Text(pDX,IDC_EDIT_TITLE,m_strTitle);if(pDX->m_bSaveAndValidate !=0)//结束保存{CMyCtrl *pCtrl = GetControlClass();if(pCtrl){pCtrl->m_StrTitleName = m_strTitle;pCtrl->SetModifiedFlag();pCtrl->Invalidate();}}
}
如果获取到的控件指针一直是NULL请在控件的构造函数中添加:
CMyCtrl::CMyCtrl()
{InitializeIIDs(&IID_DMy, &IID_DMyEvents);// TODO: 在此初始化控件的实例数据。m_xInnerUnknown = 0;
}
如果控件中包含其他的ActiveX控件如MS Web Browser导致的Create失败,请在InitInstance中添加:AfxEnableControlContainer();
这篇关于(转发)ActiveX控件编写(OCX),及属性页访问控件类对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!