對話方塊的運作

2021-06-05 20:37:22 字數 1599 閱讀 4816

windows的對話方塊根據與父視窗的關係,分為兩類。

1. 「令其父視窗除能,直到對話方塊結束」,這種稱為modal 對話方塊。

2. 「父視窗與對話方塊共同執行」,這種稱為modeless 對話方塊。

比較常用的是modal 對話方塊。我就以generic 的¡ §about¡ ¨ 對話方塊做為說明範例。

為了做出乙個對話方塊,程式設計師必須準備兩樣東西:

1. 對話方塊模板(dialog template)。這是在rc 檔案中定義的乙個對話方塊外貌,以各

種方式決定對話方塊的大小、字形、內部有哪些控制項、各在什麼位置...等等。

2. 對話方塊函式(dialog procedure)。其型別非常類似視窗函式,但是它通常只處

理wm_initdialog 和wm_command 兩個訊息。對話方塊中的各個控制項也

都是小小視窗,各有自己的視窗函式,它們以訊息與其管理者(父視窗,也就

是對話方塊)溝通。而所有的控制項傳來的訊息都是wm_command,再由其

引數分辨哪一種控制項以及哪一種通告(notification)。

modal 對話方塊的啟用與結束,靠的是dialogbox 和enddialog 兩個api 函式。請看

資源描述檔(.rc)

rc 檔案是乙個以文字描述資源的地方。常用的資源有九項之多,分別是icon、cursor、

bitmap、font、dialog、menu、accelerator、string、versioninfo。還

可能有新的資源不斷加入,例如visual c++ 4.0 就多了一種名為******* 的資源。這

些文字描述需經過rc 編譯器,才產生可使用的二進位制**。本例generic 示範icon、

menu 和dialog 三種資源。

windows 程式的生與死

1. 程式初始化過程中呼叫createwindow,為程式建立了乙個視窗,做為程式的螢

幕舞台。createwindow 產生視窗之後會送出wm_create 直接給視窗函式,

後者於是可以在此時機做些初始化動作(例如配置記憶體、開檔案、讀初始資

料...)。

2. 程式活著的過程中,不斷以getmessage 從訊息貯列中抓取訊息。如果這個消

息是wm_quit,getmessage 會傳回0 而結束while 迴圈,進而結束整個程式。

3. dispatchmessage 透過windows user 模組的協助與監督,把訊息分派至視窗

函式。訊息將在該處被判別並處理。

4. 程式不斷進行2. 和3. 的動作。

5. 當使用者按下系統選單中的close 命令項,系統送出wm_close。通常程式

的視窗函式不欄截此訊息,於是defwindowproc 處理它。

6. defwindowproc 收到wm_close 後, 呼叫destroywindow 把視窗清除。

destroywindow 本身又會送出wm_destroy。

7. 程式對wm_destroy 的標準反應是呼叫postquitmessage。

8. postquitmessage 沒什麼其它動作,就只送出wm_quit 訊息,準備讓訊息循

環中的getmessage 取得,如步驟2,結束訊息迴圈。

對話方塊 訊息對話方塊

我們在使用windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發中經常用到訊息對話方塊,所以mfc提供了兩個函式可以直接生成指定風格的訊息對話方塊,而不需要我們在每次使用的時候都要去建立對話方塊資源和生成對話方塊類等。這兩個函式就是cwnd類的成員函式mes...

對話方塊中顯示對話方塊

一 對話方塊中顯示對話方塊的方法 1 首先建立要在對話方塊裡顯示的那個對話方塊,命名為 idd inner 設定這個對話方塊的屬性 1 style 選擇 child 中文版 樣式 選擇 下層 2 border 為 none 中文版 邊框 選擇 無 2 為了顯示時能夠準確定位,我們可以在右邊要顯示對話...

常用對話方塊 訊息對話方塊

使用windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發 中經常用到訊息對話方塊,所以mfc提供了兩個函式可以直接生成指定風格的訊息對話方塊,而不需要我們在每次使用的時候都要去建立對話方塊資源和生成對話方塊類等。這兩個函式就是cwnd類的成員函式messa...