如何在DLL中创建窗体(对话框和SDIMDI)

    技术2022-05-11  114

        这是一个老问题了。我对此简单地写了一个小结,有不足之处,还请指出,谢 谢。      调用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)