非窗口消息
通常將與窗口相關的消息統稱為窗口消息(區別于線程消息),但窗口消息還可以細分為窗口消息、命令消息、通知消息、反射消息。其中通知消息時從命令消息中衍生出來的。窗口消息直接針對某個窗口,它或者是由系統發送給窗口的系統事件,或者是在用戶操作該窗口時產生的窗口事件。對大部分窗口消息,MFC都為其定義了默認的處理函數,并為這些處理函數規定了原型和名稱。但非窗口消息(命令,通知,反射消息)就顯得有些繁雜,而且一個費窗口消息可以在不同的對象之間轉發。大部分非窗口消息處理函數的名稱是隨意的,但函數原型只有幾種。
-
命令消息
命令消息就是菜單、按鈕向窗口發送的,要求執行某個功能操作的消息。每個命令都是有一個16位的ID號來標識的,命令的ID號就是命令發送者的ID號。所以,具有相同ID號的兩個發送者,產生相同的命令。不同的ID號值域標識不同的命令類型,如【0x8000,0xf000】范圍標識可傳遞的全局命令,即命令可由不同的對象處理。菜單默認是全局命令,每個菜單項的ID值都在這個范圍內;按鈕默認為局部命令,其ID值小于0x8000。所以,如果對話框附加了一個菜單,所有菜單項命令可傳遞到其父窗口和應用類,在父窗口是主框架的情況下,還可以傳遞視圖和文檔對象。而按鈕命令只能在對話框中處理。當然這只是默認的情況,通常該寫resurce.h頭文件,將菜單項變為局部命令,或將按鈕變為全局命令都是可以的。如果希望一個按鈕命令被命令路由中其他的對象處理,除該寫其命令ID值外,還必須在這個對象中手工添加映射消息。
通知消息
在WIN3.x中,通知消息是子控件通過發送WM_COMMAND命令消息實現的,這種命令消息包含一個非零的通知代碼,而普通的命令消息通知代碼為0。在WIN32中,仍然保留著這些通知消息的形式。對于在WIN3.X中已經使用的標準控件如listbox,combox,button,static,edit等都延續這種通知消息的形式。同時,對于在WIN32中新增加的控件如樹形控件,列表控件,進度指示器,跟蹤欄等,采用了WM_NOTIFY通知消息,該消息類型是真正為了通知消息而設定的。WM_NOTIFY通知消息允許子窗口傳遞更多的信息給父窗口,如子窗口將鼠標單擊事件通知給父窗口時,可以傳達貫標的位置信息。傳遞附加信息對于復制的控件和復制的消息時非常必要的。
反射消息
反射消息使子窗口控件的行為更加獨立化,而不是過多的依賴于父窗口的控制,這樣有利于模塊化和代碼重用。雖然MFC沒有為反射消息定義一個宏名,但它擁有自己的消息值,已不再隸屬于命令消息。由于發送者ID號已沒有意義,置為0。而通知代碼和處理函數原型與通知消息相同。特殊通知消息的反射消息,其宏定義遵循一定的命名規則,即在通知消息名前ON_,后加_REFLECT。
總結
- 上一篇: mysql查询姓王的信息代码_MySQL
- 下一篇: linux转mysql_[转] linu