CSDN博客

img Brierbird

如何在DLL中创建窗体(对话框和SDI/MDI)

发表于2002/5/13 9:33:00  969人阅读

    这是一个老问题了。我对此简单地写了一个小结,有不足之处,还请指出,谢 谢。
 
   调用DLL中的Dlg或SDI/MDI, 只是不能再使用APP类了,因为它是从CWinThread继承过来,内部的线程机制导出了问题的出现。
   (1)对于调用DLL中的Dialog,很简单,直接调用就是
      如:  extern "C"
            void LoadDialog()
            {
    CTestDlg   dlg;
                if (dlg.DoModal == IODK)
                {
                    //......
                }
            }
    (2)对于调用DLL中的SDI/MDI, 不那么直接。需要保证Doc/View和MainFrame之间的关联,因此得保留原来在APP中用的CDocTempate类及对它的使用。为此,我们可以自己建一个类如CSDIMain来做接替原来APP中的工作(当然不用类,就直接用问题也不大,毕竟都是创建工作都是在堆上进行的),
     如:
BOOL CSDIMain::InitInstance()
{
 // 创建模板
 if(m_pTemplate == NULL)
 {
  m_pTemplate = new CMultiDocTemplate(
   IDR_MAINFRAME,
   RUNTIME_CLASS(CSDIForTestDoc),
   RUNTIME_CLASS(CMainFrame),
   RUNTIME_CLASS(CSDIForTestView));
 }

 CSDIForTestDoc* pDocument = new CSDIForTestDoc;
 // 创建新的frame
 CFrameWnd* pFrame = m_pTemplate->CreateNewFrame(pDocument, NULL);
 if (NULL == pFrame)
 {
  AfxMessageBox("Create frame failed");
  return FALSE;
 }

 m_pTemplate->InitialUpdateFrame(pFrame, pDocument);

 return TRUE;
}

杨晓明 2002-5-11 

E-mail: brierbird97@mails.tsinghua.edu.cn

阅读全文
0 0

相关文章推荐

img
取 消
img