無模式對話框的一些注意事項

無模式對話框的創建:

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

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章