俗话说:欲速不达,昨天想着赶紧实现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外,其他对象的是实例为指针方式存在。
就这些。