如何在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
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

Brierbird

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值