想做一个像对话框一样的ATL ActiveX Control
我是这样做的:
1.建立一个ATL COM工程
2.添加一个ATL Full Control Object,类名为CDlgCtrl
设置支持MFC,并选上Windowed Only
3.添加一个ATL Object中的Miscellaneous->Dialog,类名CMyDlg
(由CAxDialogImpl模板实现)
设置属性:Child,Visible,Control
在OnOk(),OnCancel()中添加DestroyWindow()
4.向CDlgCtrl中添加成员:CMyDlg m_MyDlg
5.向CDlgCtrl中添加WM_CREATE,在LRESULT OnCreate(UINT uMsg,...)中
添加m_MyDlg.Create(m_hWnd,NULL)此时编译并测试该ActiveX Control,可以正常显示m_MyDlg对话框,点击
OK/Cancel按钮可正常关闭对话框。但是对话框的大小并不是和ActiveX Control
工作区的大小一样6.向CDlgCtrl中HRESULT OnDraw(ATL_DRAWINFO& di)
添加m_MyDlg.MoveWindow(&rc, TRUE),rc为工作区RECT此时再编译并测试,可以正常显示m_MyDlg对话框,对话框大小也和工作区
大小一致,并可随工作区大小改变而改变
但是点击OK/Cancel时,出现如下错误:
Debug Assertion Failed!
Program:...
...
Expression: ::IsWindow(m_hWnd)
For information....请问各位这是怎么回事呢?
另外,如果我想显示一个CDialog非模态对话框,
而不是CAxDialogImpl非模态对话框,该怎么做呢?

解决方案 »

  1.   

    出现IsWindow()的错误,是因为你的对话框没有获得正确的应用程序句柄来装载该对话框模板资源,在你的程序中调用该对话框之前,添加如下宏调用,试一下能否解决问题;
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
      

  2.   

    分别在m_MyDlg.Create()和m_MyDlg.MoveWindow()前加上
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
    错误依旧!
    谁能帮我解决这个问题,如果能显示CDialog非模态对话框最为理想!!!