Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343716
  • 博文数量: 72
  • 博客积分: 2130
  • 博客等级: 大尉
  • 技术积分: 857
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-05 16:10
文章分类

全部博文(72)

文章存档

2010年(5)

2009年(14)

2008年(53)

分类: WINDOWS

2010-01-28 19:05:56

    模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作。而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他窗口同时接受用户操作。

    模态对话框创建和销毁

    模式对话框一般是使用DoModal创建的,响应IDOKIDCANCEL进行销毁,如:

    //创建和销毁

    CTestDlg dlg;

    int i;

    i = dlg.DoModel();

    if (i == IDOK)

    {

    // do something

    }

    else if(i == IDCANCEL)

    {

    // do other something

    }

    非模态对话框创建和销毁

    非模式对话框是使用Create创建的,非模态对话框需要重载函数OnCanel,并且在这个函数中调用DestroyWindow;并且不能调用基类的OnCancel,因为基类的OnCancel调用了EndDialog这个函数,这个函数是针对模态对话框的。
    还有一个必须重载的函数就是PostNcDestroy,这也是一个虚函数,通常的非模态对话框是用类的指针,通过new创建的,这就需要在PostNcDestroy函数中delete掉这个指针。如果要在点击按钮的情况下,销毁非模态对话框,只需要把按钮的事件映射到OnCancel函数即可。

    例子:

    //建立

    //主框架中:

    CTestDlg *pDlg=new CTestDlg();
    pDlg->Create(IDD_TESTDLG,this);
    pDlg->ShowWindow(SW_SHOW);

    //销毁

    //对话框中:

    void CTestDlg::OnCancel()
    {
    DestroyWindow();
    }

    void CTestDlg::PostNcDestroy()
    {
    CDialog::PostNcDestroy();
    delete this;
    }

阅读(5392) | 评论(0) | 转发(0) |
0

上一篇:Base C Plugin for Pidgin

下一篇:Perl学习笔记

给主人留下些什么吧!~~