無模式對話框的創建:
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);
}