程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> Windows SDK筆記(五):非模式對話框

Windows SDK筆記(五):非模式對話框

編輯:關於VC++

一、概述

使用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以銷毀非模式對話框。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved