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

无模式对话框的创建:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值