WEB开发网
开发学院软件开发VC Windows区对象(Bands)的创建与定制 阅读

Windows区对象(Bands)的创建与定制

 2009-11-11 20:32:13 来源:WEB开发网   
核心提示:三、定制浏览栏的一个简单例子这个例子展示了前面所介绍过的垂直浏览栏的整个实现过程,它借助了平台SDK(Platform SDK——在msdn中可以找到)中关于band对象示范代码,Windows区对象(Bands)的创建与定制(4),其中还包括了水平浏览栏和桌面band的实现代码,详细实现细节请

三、定制浏览栏的一个简单例子

这个例子展示了前面所介绍过的垂直浏览栏的整个实现过程。它借助了平台SDK(Platform SDK——在msdn中可以找到)中关于band对象示范代码。其中还包括了水平浏览栏和桌面band的实现代码。详细实现细节请参见:CommBand.cpp和DeskBand.cpp。

创建定制浏览栏的基本过程是这样的:

实现DLL需要的函数。

实现必须的COM接口。

实现任何想要的可选接口。

注册对象的CLSID。

进行恰当的组件种类注册。

创建IE子窗口,调整窗口大小适合浏览栏的显示区域。

使用子窗口显示信息并与用户交互。

实际上,只要通过恰当的组件种类注册,浏览栏例子代码便既可用于浏览栏的实现,也能用于桌面band实现。更加复杂的实现将需要定制每种对象类型的显示区域和容器。但大多数的定制工作都能通过范例代码以及Windows子窗口的编程技术来完成。例如,你可以添加用户交互控制或者进行色彩丰富的图形显示处理。

DLL函数

所有三种区对象被打包在一个DLL中,它输出以下的函数:

DllMain

DllCanUnloadNow 

DllGetClassObject 

DllRegisterServer 

这些函数可以在BandObjs.cpp中找到,它们服务于所有三种区对象。前三个函数乃标准的实现,我们不再本文中讨论。类工厂也是标准实现,代码可以在ClsFact.cpp中找到

注册定制的浏览栏

有了COM对象后,必须对浏览栏的CLSID进行注册。另外如果要与IE或资源管理器

协调运行,还必须进行的恰当的组件种类(CATID_InfoBand)注册。这个工作由DllRegisterServer处理。浏览栏例子代码有关的处理部分如下:

...
//注册浏览栏对象
if(!RegisterServer(CLSID_SampleExplorerBar, TEXT("垂直浏览栏例子")))
return SELFREG_E_CLASS;
//注册浏览栏的对象组件种类
if(!RegisterComCat(CLSID_SampleExplorerBar, CATID_InfoBand))
return SELFREG_E_CLASS;
...
区对象的注册使用通常的COM过程,它由私有函数RegisterServer处理。

除了CLSID之外,这个区对象服务器还必须注册一个以上的组件种类。这实际上是垂直浏览栏和水平浏览栏实现之间的主要差别。这个过程的处理是通过创建一个组件种类管理器对象(CLSID_StdComponentCategoriesMgr),并用ICatRegister::RegisterClassImplCategories方法来注册区对象服务器。在这个例子中,组件种类注册的处理是通过将浏览栏的CLSID和CATID传递到私有函数RegisterComCat完成的:

BOOL RegisterComCat(CLSID clsid, CATID CatID)
{
ICatRegister  *pcr;
HRESULT    hr = S_OK ;

CoInitialize(NULL);
hr = CoCreateInstance( CLSID_StdComponentCategoriesMgr,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICatRegister,
(LPVOID*)&pcr);
if(SUCCEEDED(hr))
{
hr = pcr->RegisterClassImplCategories(clsid, 1, &CatID);
pcr->Release();
}

CoUninitialize();
return SUCCEEDED(hr);
}

上一页  1 2 3 4 5 6 7  下一页

Tags:Windows 对象 Bands

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