无模式对话框的创建:
1. 添加对话框资源,假设其资源名为IDD_DIALOG1
2. 为对话框创建类,假设其类名为CTestDlg
3. 在stdafx.h文件中加入对CTestDlg类的头文件引用, #include “TestDlg.h”
4. 在引用CTestDlg类的头文件中添加成员变量:
public:
CTestDlg dlg;
5. 显示无模式对话框:
dlg.Create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
这样,一个无模式对话框就创建好了。然后,我设了一个计时器,让它在5秒钟后自动关闭。这很常用,一般都是以事件作为驱动,多线程应用中比较多见。比如,在网络通信中,一个操作可能需要较多的时间,为了让用户知道程序在做些什么,需要有这么一个提示对话框。在操作完毕后自动关闭。现在就以计时器定时来驱动这个无模式对话框。
无模式对话框的关闭:
SetTimer(1,5000,NULL); //启用计时器
响应WM_TIMER消息,在OnTimer中写如下代码:
if( nIDEvent == 1)
{
dlg.PostMessage(WM_CLOSE); //向对话框发送关闭消息
KillTimer(1);
}
这一切看来是那么平常,编译,执行也很顺利!我差点以为自己对了……结果,当对话框关闭后,我想第二次显示它的时候,确报异常了。怎么回事?原来模式对话框是可以用WM_CLOSE消息关闭的,但无模式对话框不行!无模式对话框必须用DestroyWindow方法来关闭。把代码改成下面这样就通过了……
if( nIDEvent == 1)
{
dlg.DestroyWindow(); //这样就没有问题了
KillTimer(1);
}