星期日, 10月 15, 2006

MFC 訊息分類

MFC,把訊息分為三大類:

1. 命令訊息( WM_COMMAND
舉凡由UI產生的訊息都是這種命令訊息,可能來自選單、加速鍵或工具按鈕都是以WM_COMMAND呈現。
什麼樣的類別有資格接受命令訊息?衍生自CCmdTarget之類皆有資格。

2. 標準訊息
除了WM_COMMAND外,任何以WM_開頭的都算這一類,任何衍生自 CWnd之類別均可接收此訊息。

3. Control Notification
由控制元件產生,為的是向父視窗通知某種情況。例如;你在ListBox上選擇某一項目,ListBox 就會產生LBN_SELCHANGE給父視窗。這類訊息也是以WM_COMMAND的形式呈現。wParam 記錄著此訊息來自那一個選單。只要是CWnd的是衍生類別就可以攔下任何Windows訊息。

與視窗無關的MFC類別(例如:CDocument & CWinApp )如果也想處理訊息,必須衍生自CCmdTarge並且只能接收WM_COMMAND的訊息。

星期三, 10月 11, 2006

PreTranslateMessage

CWnd::PreTranslateMessage() 為虛擬函數,所有CWnd的衍生類別均可修改之,Windows 在執行Dispatch Message前,會呼叫該函數。假設衍生類別需要預先intercept (攔截)特定的訊息時可修改其內容。

Window 訊息流向:子視窗 --> 父視窗

例如:
控制項(Edit)在Dialog B中,而Dialog A為Dialog B的父視窗,假設視窗的Focus在控制項Edit上,使用者按下鍵盤後是由誰先處理Message?
是由控制項(Edit)先接收到該Message。

假設PreTranslateMessage被改寫了,該函數的回傳值所代表的意義
False: 告知父視窗Message需要再處理
True: 告知父視窗Message不需要再處理

星期六, 10月 07, 2006

石門水庫

Coordinate: 121°15'40.30"E 24°48'48.34"N
 Posted by Picasa