WEB开发网
开发学院软件开发VC 编写可复用性更好的C++代码:Band对象和COMToys(7)... 阅读

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

 2006-07-21 11:46:03 来源:WEB开发网   
核心提示: CBandObj从IDeskBand继承IOleWindow 和 IDockingWindow,所以必须实现它们,编写可复用性更好的C++代码:Band对象和COMToys(7)(2),对于IUnknown来说,COMToys的宏声明方法,这样感觉比较专业,因为它也是COM的基本原则,DE

CBandObj从IDeskBand继承IOleWindow 和 IDockingWindow,所以必须实现它们。对于IUnknown来说,COMToys的宏声明方法,DECLARE_IOleWindow 和 DECLARE_IDockingWindow仅声明大多数派生的方法,而不是继承的方法(马上就会明白为什么),这两个宏都是不可少的。DECLARE_IDeskBand宏是不存在的,因为COMToys不具备实现它的类;IDeskBand由CBandObj实现。对于IUnknown,COMToys有更多的宏实现此接口。

新的宏用CTOleWindow实现了IOleWindow,并用CTDockingWindow 实现了IDockingWindow。IMPLEMENT_IWhatsIt宏通过产生调用类实现的方法将某个接口定义(抽象类)与接口实现(具体的类)进行链接。

// 由IMPLEMENT_IOleWindow产生
HRESULT CBandObj::GetWindow(HWND* pHwnd)
{
  CMDTARGENTRYTR(
   _T("CBandObj(%p)::IOleWindow::GetWindow\n"),
   this);   
  return CTOleWindow::GetWindow(pHwnd);
}   

一旦你声明并实现了这些接口,剩下的事情是通过在GetInterfaceHook中编写代码,让MFC知道它们:

// 在CBandObj::GetInterfaceHook中
if (iid==IID_IOleWindow)
  return (IOleWindow*)this;
if (iid==IID_IDockingWindow)
  return (IDockingWindow*)this;   

很简单,如果理解了它们在IOleWindow中的工作原理,便会明白CBandObj的代码大多是相同东西的重复。对于新的COM类实现的每个IWhatsIt接口,要从两个类派生:COM接口本身(IWhatsIt)和实现CTWhatsIt的CT类。执行类可以是COMToys所带的一个类或是自己的类。两种情况的接口和实现都是分开的。这样感觉比较专业,因为它也是COM的基本原则。 现在假设已经有了实现某些接口的CTWhatsIt,为了在自己的COM类中使用它,必须做四件事情:

上一页  1 2 3 4  下一页

Tags:编写 复用 更好

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接