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

    这是一个老问题了。我对此简单地写了一个小结,有不足之处,还请指出,谢 谢。
 
   调用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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值