编写可复用性更好的C++代码:Band对象和COMToys(2)
2006-07-21 11:44:10 来源:WEB开发网核心提示:本文假设你熟悉C++,COM,编写可复用性更好的C++代码:Band对象和COMToys(2),IE,第二部分 BandObj的类层次和MyBands服务程序的注册BandObj的类层次结构阅读了第一部分内容以后,种类ID和资源ID,CBandObjFactory传递头两个参数到MFC,现在你应该有点明白如何用Band
本文假设你熟悉C++,COM,IE。
第二部分 BandObj的类层次和MyBands服务程序的注册
BandObj的类层次结构
阅读了第一部分内容以后,现在你应该有点明白如何用BandObj来编写band对象了(定义一个GUID,然后调用AddBandClass),下面我们进一步深入BandObj,揭示其工作原理。从BandObj中我们可以看到它涉及三个类:CBandObjDll, CBandObjFactory, 和 CBandObj,这三个类与MFC之间的关系如图五所示:
图五
CBandObjFactory是创建CBandObj对象的类工厂。通常不必直接使用这个类。当你从InitInstance函数中调用AddBandClass时,CBandObjDll将创建一个新的类工厂,并将这个类工厂添加到一个列表中:
BOOL CBandObjDll::AddBandClass(...)
{
CBandObjFactory* pFact =
OnCreateFactory(...);
pFact->m_pNextBandFact =
m_pBandFactories;
m_pBandFactories = pFact;
return TRUE;
}
OnCreateFactory 是一个虚函数,仅仅返回一个新的类工厂。
CBandObjFactory* CBandObjDll::OnCreateFactory(...)
{
return new CBandObjFactory(...);
}
我在这里提供OnCreateFactory的目的是一旦你想要派生自己专用的工厂类的话,就可以从CBandObjFactory派生并重载OnCreateFactory,让BandObj使用它。为清晰起见,我省略了参数,这里的参数与传递到AddBandClass的参数一样:类ID,MFC运行时类,种类ID和资源ID。CBandObjFactory传递头两个参数到MFC,后两个参数是自己用的。
更多精彩
赞助商链接