编写可复用性更好的C++代码:Band对象和COMToys(7)
第一部分:Band 对象介绍
第二部分:BandObj的类层次和MyBands服务程序的注册
第三部分:深入Band内部,揭开Band的面纱
第四部分:Band对象使用中遇到的一些问题
第五部分:建立自己的COM编程平台ComToys
第六部分:设计和构造COMToys
第七部分 类的实现
类的混合实现
到目前为止,我介绍了一种用多继承代替嵌套类在MFC中实现COM对象的方法。基本思路是忽略MFC宏和接口映射,并调用GetInterfaceHook来返回接口指针。很明显,这已经使编程容易了许多,但可复用性体现在哪呢?开发COMToys的主要目的是让它具备可复用性特点来实现普通的COM接口。为此,COMToys使用了混合类。
混合类被设计成利用多继承特性与其它类混合。通常混合类与主类的关系是直交的,也就是说它提供与类层次的无关性来避免菱形派生树(请原谅我的矛盾修饰法),不用怀疑,CBandObj比我在前面四个部分中讨论的要复杂一些,其新版本的代码如下:
//更新的 CBandObj
/////////////////////////////////////////
// CBandObj —— 典型的实现多接口的 COM 类
// 头文件.h :
class CBandObj : public CWnd,
// interfaces
// public IOleWindow, // 从IDeskBand继承
// public IDockingWindow, // 从IDeskBand继承
public IDeskBand,
public IObjectWithSite,
public IInputObject,
// public IPersist, // 从IPersistStream继承
public IPersistStream,
public ICborder="0" alt="编写可复用性更好的C++代码:Band对象和COMToys(7)" width="353" height="482" /> 图十二 CBandObj 上下文菜单
当容器调用IContextMenu::QueryContextMenu获得菜单项时,CTMfcContextMenu用希望的CMenu项填写菜单,但不是在创建CcmdUI对象之前,并且通过CCmdTarget发送,从而ON_UPDATE_COMMAND_UI处理器都能挂上菜单。同样,当容器调用InvokeCommand,CTMfcContextMenu发送这个命令到ON_COMMAND处理器。CTMfcContextMenu甚至能通过查找串资源来处理提示串。简言之,CTMfcContextMenu将COM语言转换成MFC语言。剩下的事情只是给它一个菜单和命令目标(通常是COM类本身)。所有的命令处理与在MFC应用中处理一样,不用再次实现IContextMenu——用COMToys就能搞掂。(待续)
转载保留:进入讨论组讨论。
- 最新文章
- 用Eclipse平台进行C/C++开发[01-03]
- 轻轻松松C to C++[01-03]
- 轻轻松松C to C++ (二)[01-03]
- Visual C++环境下DBGrid控件的使用[01-03]
- C++实现CD抓轨转WAV[01-03]
- 编写可复用性更好的C++代码:Band对象和COMToys(..[01-03]
- 相关文章
