关于弹出式(POPUP)对话框的显示

来源:互联网 发布:神武挖山水算法 编辑:程序博客网 时间:2024/05/02 00:18


    对于弹出式对话框的显示:当我们在一个类的构造函数中添加了成员:另一个对话框类的对象m_ClientMessageDlg(该对话框类为POPUP型),那么我们在初始化函数中显示对话框类时,若添加以下代码:m_ClientMessageDlg.Create(IDD_DIALOG_CLIENTMESSAGE,this);m_ClientMessageDlg.ShowWindow(SW_HIDE);  该段代码的目的是先创建对话框,然后隐藏。 那么我们会发现程序运行时对话框弹出,然后隐藏,对话框显示时间为这行代码执行时间。若这个弹出式对话框与某个按键相关联,在该按键响应函数中添加如下代码:m_ClientMessageDlg.ShowWindow(SW_SHOW);让对话框显示。这时对话框确实可以显示。但从程序运行到对话框显示的整个过程可能达不到我们需要显示的效果,因为在程序刚刚运行时,对话框会一闪而过,继续按按键,对话框正常显示 。 问题出在Create上。对于弹出式对话框,创建时就显示了。那么对于弹出式对话框,在按键响应函数中直接添加如下代码:m_ClientMessageDlg.DoModal()。关于doModal函数,MSDN中这样说明:

CDialog::DoModal

Call this member function to invoke the modal dialog box and return the dialog-box result when done.

但是若在按键响应函数中添加如下代码:m_ClientMessageDlg.Create(IDD_DIALOG_CLIENTMESSAGE,this); ,那么也可以实现对话框的正常显示,但是,当第二次点击按键时,系统会弹出非法操作符:


这主要是在点击按键创建对话框后,虽然说关闭了对话框,但是对话框句柄并没有释放,该对话框与m_ClientMessageDlg这个对象已关联,第二次点击按键,又重复创建一个窗口并试图与m_ClientMessageDlg这个对象相关联,但因为此时m_ClientMessageDlg这个对象已经和一个窗口绑定在一起了,所以就会出现非法操作。

   所以关于弹出式对话框,使用DoModal比较好。

0 0
原创粉丝点击