模式和无模式对话框

     无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。创建无模式对话框需要调用
BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );然后再调用
BOOL CDialog::ShowWindow( SW_SHOW);进行显示,否则无模式对话框将是不可见的。相关代码如下:

      void CView::OnOpenDlg(void)
      {
                CDialog *dlg=new CDlg;
               dlg->Create(IDD_DLG,NULL);    //IDD_DLG为已经定义的对话框资源的ID号
               dlg->ShowWindows(SW_SHOW);
        }
     在上面的代码中我们新生成了一个对话框对象,而且在退出函数时并没有销毁该对象。因为如果此时销毁该对象(对象被销毁时窗口同时被销毁),而此时对话框还在显示就会出现错误。所以我们可以在对话框退出时销毁自己:在对话框中重载OnOK与OnCancel在函数中调用父类的同名函数,然后调用DestroyWindow()强制销毁窗口,在消息处理函数中调用delete this; 强行删除自身对象。相关代码如下:

        void CTestDlg1::OnOK()

        {

                     CDialog::OnOK();

                     DestroyWindow();

         }

        void CTestDlg1::OnCancel()

       {

                   CDialog::OnCancel();

                  DestroyWindow();

        }

      void CTestDlg1::OnDestroy()

      {

                CDialog::OnDestroy();

               AfxMessageBox("call delete this");

               delete this;

        }

      这种方法的要点是在窗口被销毁的时候,删除自身对象。所以你可以在任何时候调用DestroyWindow()以达到彻底销毁自身对象的作用。(DestroyWindow()的调用会引起OnDestroy()的调用)

        对于模式对话框只需要调用DoModal();即可,而且在退出对话框时自动销毁该对象:

        void CView::OnOpenDlg(void)
         {
                 CDialog  dlg;
                 dlg.DoModal();
          }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值