最近,在用ATL做一个ActiveX控件,这个控件要加载其他的OCX控件,我建了一个支持MFC的ATL工程,然后,在这个工程中insert了一个MFC对话框,把要加载的ocx控件放到这个MFC对话框中,在这个工程中我准备提供一个方法让外部调用,调用这个方法的同时把要包含的ocx控件也加载上,因此,必须要把这个对话框Create出来。当我把ATL控件做好后给外部调用时,问题出现了。Create对话框时,总是失败,提示创建不成功。我自己整了好长时间都没有找到解决的办法,最后,还是我们头帮我解决了这个问题,下面我把解决方法贴出来,供大家参考,省的以后再遇到这个问题整自己焦头烂额。
首先,在CXXXApp类(只有选择支持MFC的ATL工程中才会有这个类)的InitInstance()函数中加入下面这句话:
BOOL CEzMsgApp::InitInstance()
{
AfxEnableControlContainer(); //添加这句话
_Module.Init(ObjectMap, m_hInstance, &LIBID_EZMSGLib);
return CWinApp::InitInstance();
}
{
AfxEnableControlContainer(); //添加这句话
_Module.Init(ObjectMap, m_hInstance, &LIBID_EZMSGLib);
return CWinApp::InitInstance();
}
其次,在需要创建对话框中的类中先声明类对象指针:如:CXXXDlg* m_pDlg;在构造函数中
AFX_MANAGE_STATE(AfxGetStaticModuleState())//此句是必须的
m_pdlg = new CMsgLibDlg;
m_pdlg = new CMsgLibDlg;
然后,在要创建对话框的地方进行创建就可以了
m_pdlg->Create(CMsgLibDlg::IDD);
m_pdlg->ShowWindow(SW_HIDE);
m_pdlg->ShowWindow(SW_HIDE);
如果没有上面两步的设置创建就会不成功,这个问题搞了我一天多的时间,希望这篇文章能给那些遇到同样的问题的人有所帮助。
转载于:http://blog.chinaunix.net/uid-20555100-id-1926555.html