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