科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道模式和无模式对话框

模式和无模式对话框

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。

作者:ghost 来源:CSDN 2007年9月28日

关键字: ghost 模式 无模式 对话框

  • 评论
  • 分享微博
  • 分享邮件
无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。创建无模式对话框需要调用
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();
          }



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1583085

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章