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

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

无模式对话框的创建:

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

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航