MDI支援

MDI支援

探討Windows的MDI支援時需要發表一些新術語。主套用程式視窗稱為「框架視窗」,就像傳統的Windows程式一樣,它是WS_OVERLAPPEDWINDOW樣式的視窗。

MDI支援MDI支援

相關

MDI套用程式還根據預先定義的視窗類別MDICLIENT建立「客戶視窗」,這一客戶視窗是用這種視窗類別和WS_CHILD樣式呼叫CreateWindow來建立的。這一呼叫的最後一個參數是指向一個CLIENTCREATESTRUCT型態的結構的指標。這個客戶視窗覆蓋框架視窗的顯示區域,並提供許多MDI支援。此客戶視窗的顏色是系統顏色COLOR_APPWORKSPACE。
檔案視窗被稱為「子視窗」。通過初始化一個MDICREATESTRUCT型態的結構,以一個指向此結構的指標為參數將訊息WM_MDICREATE傳送給客戶視窗,就可以建立這些檔案視窗。
檔案視窗是客戶視窗的子視窗,而客戶視窗又是框架視窗的子視窗。父-子視窗分層結構如圖所示。
您需要框架視窗的視窗類別(及視窗訊息處理程式)和一個由套用程式支援的每類子視窗的視窗類別(及視窗訊息處理程式)。由於已經預先註冊了視窗類別,所以不需要客戶視窗的視窗訊息處理程式。
Windows 98的MDI支援包括一個視窗類別、五個函式、兩個資料結構和12個訊息。前面已經提到了MDI視窗類別,即MDICLIENT,以及資料結構CLIENTCREATESTRUCT和MDICREATESTRUCT。在MDI套用程式中,這五個函式中的兩個用於取代DefWindowProc:不再將DefWindowProc呼叫用於所有未處理的訊息,而是由框架視窗程式呼叫DefFrameProc,子視窗程式呼叫DefMDIChildProc。另一個MDI特有的函式TranslateMDISysAccel與第十章中討論的TranslateAccelerator的使用方式相同。MDI支援也包括ArrangeIconicWindows函式,但有一條專用的MDI訊息使得此函式對MDI程式來說不再必要。
第五個MDI函式是CreateMDIWindow,它使得子視窗可以在單獨的執行緒中被建立。這個函式不需要在單執行緒的程式中,我會展示這一點。
在下面的程式中,我將展示12條MDI訊息中的9條(其他三個訊息一般不用),這些訊息的字首是WM_MDI。框架視窗向客戶視窗傳送其中某個訊息,以便在子視窗上完成一項操作或者取得關於子視窗的資訊(例如,框架視窗傳送一個WM_MDICREATE訊息給客戶視窗,以建立子視窗)。訊息WM_MDIACTIVATE訊息有點特別:框架視窗可以傳送這個訊息給客戶視窗來啟動一個子視窗,而客戶視窗也把這個訊息傳送給將被啟動或者失去活動的子視窗,以便通知它們這一變化。

相關詞條

相關搜尋

熱門詞條

聯絡我們