俗話說:欲速不達,昨天想著趕緊實現LngosHook,但思路很混亂,寫了很多代碼,也刪除了很多,最后只留下一個Hook對象。俗話又說:磨刀不誤砍柴工,于是今天空出的時間不多,就靜下心了,想了想該如何實現LingosHook。于是就有了下面的圖.
MainFrame是界面部分,由wxGlade設計并自動生成wxWidgets代碼,以我的習慣,這部分怕會是換來換去,要是主要代碼寫在其中,那么每次重新生成MainFrame時就要重寫,這太。。煩了。因此將主要功能分隔在多個獨立的對象中處理,對象間通過引用或者引用變量來分離功能間的耦合。
HookObject負責注冊、卸載Hook,處理由Hook發來的指定消息,將收到的TEXT和HTML數據通過_objResultProc引用,傳遞給ResultProcObject對象處理;
ResultProcObject負責處理收到的數據,并通過_objDBAccess引用交有DBAccess對象操作數據庫,并通過_objDisplayProc和_ctrlTrace引用通知DisplayProcObject,MainFrame數據的變化;
DisplayProcObject負責顯示工作,包括Index和Result,這樣需要通過_objDBAccess引用訪問數據庫;
DBAccess對象作為單一的數據庫訪問接口放置多路訪問數據庫,需要提供訪問所需各自API操作接口;
由上圖可知,所有對象都是MainFrame的成員,由MainFrame負責初始和管理,根據圖形關系可以看出,如果對象間的引用在對象初始時通過構造函數傳入,那么初始順序為DBAccess,DisplayProcObject,ResultProcObject, HookObject,且除了DBAccess外,其他對象的是實例為指針方式存在。
就這些。