敬业的IT人 >> 编程开发 >> C/C++ >> 编写可复用性更好的C++代码:Band对象和COMToys(5)

编写可复用性更好的C++代码:Band对象和COMToys(5)

敬业的IT人 互联网 佚名 2008-1-3 19:10:13

  第一部分:Band 对象介绍

  第二部分:BandObj的类层次和MyBands服务程序的注册

  第三部分:深入Band内部,揭开Band的面纱

  第四部分:Band对象使用中遇到的一些问题

  第五部分 建立自己的COM编程平台ComToys

  概要:

  可重用类就像小巧的 COM 积木一样,人们可以在不同场合以不同方式装配这些 COM 来创建更加精致的对象。但是如何创建这些 COM 呢?本文使用 MyBands 和 BandObj框架作为实验平台开发了一个可重用库:它就是 COMToys......。COMToys提供了一种用C++编写COM的方法或途径,这些方法和途径适用于任何类型的COM对象,不论你是使用MFC。还是其它的什么东西。COMToys是一种态度——它告诉人们用C++编写COM组件并不难,情况也确实是这样!

  前面我们讨论了一个叫MyBands的程序,这个程序有功能之一就是可以将编辑框控制放到Windows的任务栏中。此外,MyBands实现了三种Windows的Band对象,其中就有Web搜索框,如图一所示:

编写可复用性更好的C++代码:Band对象和COMToys(5)(图一)

  图一 任务栏中的Web搜索框

  为了实现MyBands程序,我编写了一个迷你型Band对象框架:BandObj,其对应的实现类是CBandObjDll,CBandObjFactory,和CBandObj。这个框架提供了编写各种Band对象所需要的支持。利用这个Band对象框架,你不必做太多的工作就能开发出满足自己需要的Band应用。

  CBandObj中有许多代码实现不同的接口像IDeskBand,IOleWindow,ICborder="0" alt="编写可复用性更好的C++代码:Band对象和COMToys(5)(图二)" width="256" height="151" />

  图十六 MyBands的体系结构

查看

  图十七 多继承 

  既然多继承如此之好,为什么MFC不用它呢?因为一碰到具体的类——那些有真实函数和数据的类时——多继承便引起混淆。如果你写x = m_foo,这里的 m_foo是个从A继承还是从B继承的呢?而且MFC从CObject派生了它的所有类,用多继承会导致可怕的菱形层次。虽然可以用虚基类来克服这种不足,但事情会更糟。所以创建MFC的那位哥们儿聪明地决定避开多继承。(待续)

查看 进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com