无模式对话框的一些注意事项

类别:VC语言 点击:0 评论:0 推荐:

无模式对话框的创建:

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);
}

本文地址:http://com.8s8s.com/it/it699.htm