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