一、概述
使用DialgBox建立的對話框是“模式對話框”,只有關閉對話框後,程序的其他窗口才能進行操作。
與此相對應,存在“非模式對話框”,對話框建立後,並不強制要求用戶立即反應,而是與其他窗口同時接受用戶操作。
二、建立
非模式對話框使用CreateDialg建立。
可以在WinMain中建立主窗口後建立,對話框句柄保存備用。
hDlgModeless = CreateDialog (
三、消息循環添加針對非模式對話框的處理
hInstance,
TEXT ("ColorScrDlg"), //對話框模板
hwnd,
ColorScrDlg //對話框消息處理函數
);
“非模式對話框”與“模式對話框”不同,模式對話框工作的時候,有其內部的消息泵機制。
而非模式對話框則象普通窗口一樣,由WinMain中書寫的消息循環驅動。
但由於是對話框,它對一些消息有特殊的處理,例如用於在對話框中各子控件間導航的"TAB"鍵、"ENTER"鍵等等。
因此,在消息循環中,需要先給對話框提供截獲消息的機會。
while (GetMessage (&msg, NULL, 0, 0))
{
if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
}
如果當前取得的消息是對話框消息的話,IsDialgMessage將它交由對話消息處理函數處理,並返回TRUE。
不需要在派發了。
四、非模式對話框的銷毀
使用:
DestroyWindow (hDlg);
用戶關閉對話框時,對話框消息處理函數將收到WM_CLOSE消息,接到後調用DestroyWindow以銷毀非模式對話框。