關(guān)于易.塵土 界面庫,您需要知道的。
?1、掛接菜單事件
??掛接命令事件和菜單選擇事件 統(tǒng)稱為 掛接菜單事件,這類消息都是通過WM_COMMAND發(fā)送。如:一個按鈕被單擊,一個菜單項被單擊。
2、掛接事件
??任何窗口消息 都可以通過 掛接事件() 來進(jìn)行處理。 如 WM_SIZE 尺寸被改變事件,WM_PAINT 重畫事件 WM_CLOSE 關(guān)閉事件 等。
?
3、掛接組件事件
??一些組件,有自身的擴(kuò)展事件,比如 選擇框的“選擇改變”等。在windows 早期,通知事件也是通過 WM_COMMAND 發(fā)送的。但后來 WM_COMMAND 已經(jīng)不能滿足需求。因此 也有部分通知事件是通過 WM_NOTIFY 消息發(fā)送的。這兩類事件 都通過 掛接通知事件來進(jìn)行處理。
?
4、滾動事件
??就目前,這是滾動條和滑塊條特有的事件。您也可以通過 掛接事件() WM_HSCROLL WM_VSCROLL 進(jìn)行處理。當(dāng)然 掛接滾動事件或者掛接事件肯定不符合面向?qū)ο蟮脑O(shè)計思想,您也可以繼承一個類并覆蓋 滾動事件()方法進(jìn)行處理。(圖一) 滾動事件方法原型
?
5、關(guān)于事件的處理順序。
??一個相同事件,您可以掛接多個處理子程序。調(diào)用順序是 后掛接的先被調(diào)用。如果一個事件要被忽略,不被先掛接的處理子程序處理,您可以使用 事件.跳過 () 來進(jìn)行忽略。事件函數(shù)的返回值是邏輯型,返回真 表示這個事件會發(fā)給窗口過程處理,返回假 則表示這個消息不需要默認(rèn)窗口過程處理了。
?
6、關(guān)于消息過濾。
?? ?任何一個屬于組件自身的消息,組件都有最高的優(yōu)先級來處理它。 這個處理方法在對象的 消息預(yù)處理() 里實現(xiàn)。如果您要自己優(yōu)先處理屬于組件自身的消息,那么最好的辦法就是在 消息預(yù)處理()里做。 當(dāng)系統(tǒng)從消息隊列中獲取一個消息,它首先判斷屬于哪個組件或者窗口,然后調(diào)用 它的 消息預(yù)處理() 方法,如果這個方法返回假 則表明這個消息不需要繼續(xù)分發(fā)。如果返回真,它會調(diào)用事件組件的父窗口的消息預(yù)處理()方法,直到消息被處理。如果您需要過濾隊列消息,這里是優(yōu)先級最高的位置。當(dāng)然有一些非隊列消息在這里是不能進(jìn)行處理的。 比如 WM_PAINT。windows為了提高窗口繪圖效率。對于WM_PAINT等是不會通過消息隊列的,而是直接調(diào)用窗口過程。您可以繼承一個窗口,然后 覆蓋 消息過程() 來進(jìn)行過濾。
?(圖二)?消息預(yù)處理方法原型
?
?
(圖三)?消息過程方法原型