易語言界面庫的實現(xiàn)(二)消息預處理 和窗口生存周期。
????? 在窗口過程里面能處理所有的消息? 答案是 NO!
?
??? isdialogmessage 和 TranslateMessage 干啥吃的? 它把原始消息都給弄了一下。我拿不到原汁原味的東西。
?
??? 如果說封裝庫。會有這個損失。那肯定是最大的損失!要讓你的窗口類能夠有機會處理最原始的消息。那必須在消息分發(fā)之前。也就是說 GetMessage 之后就直接處理。這才叫原汁原味。當然,對于非隊列消息。也就只能能在窗口過程里處理。這完全足夠了。
?
??? 到現(xiàn)在為止。易語言的類里面有了兩個最基本的虛方法。"消息過程" 和 “消息預處理”。這兩個方法都是被系統(tǒng)調用。你要處理自己的。你要自己處理這些事? 繼承覆蓋。就可以了。
?
???? 關于事件表。
?
每個類都有自己的 事件表。用哈希+鏈表來管理,雖然內存大了點。但速度整體還行。特別是寫大型界面的時候。不會損失太多消息映射效率。
?
???? 關于窗口生存周期、
?
又一次用到了以語言的虛方法和匯編了。在窗口過程的 WM_NCDESTROY 事件里面。調用對象的 “清理對象” 方法。這樣在窗口關閉的時候。對象能有機會回收資源。 你繼承的窗口類也是如此。覆蓋這個方法。自己在里面回收就是了。要注意的是。你必須在你的類里面顯式調用基類的同名方法。否則基類的資源會無法回收。
?
?