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

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

这是一个老问题了。我对此简单地写了一个小结,有不足之处,还请指出,谢 谢。

调用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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航