Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230511
  • 博文数量: 55
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 530
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-22 17:59
文章分类

全部博文(55)

文章存档

2015年(2)

2011年(1)

2010年(1)

2009年(18)

2008年(16)

2007年(17)

我的朋友

分类: C/C++

2009-12-15 16:28:54

    最近,在用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();
        }
其次,在需要创建对话框中的类中先声明类对象指针:如:CXXXDlg* m_pDlg;在构造函数中
       AFX_MANAGE_STATE(AfxGetStaticModuleState())//此句是必须的
       m_pdlg = new CMsgLibDlg;
然后,在要创建对话框的地方进行创建就可以了
      m_pdlg->Create(CMsgLibDlg::IDD);
      m_pdlg->ShowWindow(SW_HIDE);
 
如果没有上面两步的设置创建就会不成功,这个问题搞了我一天多的时间,希望这篇文章能给那些遇到同样的问题的人有所帮助。
 
阅读(1568) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~