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

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

 2009-11-11 20:32:13 来源:WEB开发网   
核心提示:二、实现区对象尽管可以像使用普通窗口一样使用区对象,但它们毕竟是COM对象,Windows区对象(Bands)的创建与定制(2),存在于某个容器之中,如浏览栏和工具栏位于IE之中, 0 隐藏所有桌面band,

二、实现区对象

尽管可以像使用普通窗口一样使用区对象,但它们毕竟是COM对象,存在于某个容器之中。如浏览栏和工具栏位于IE之中,桌面区位于外壳之中。虽然它们的功能不同,但其基本实现非常相似。一个主要的差别是它们的注册方式不同,而注册方式的不同又决定了对象的类型及其容器。这一部分我们先讨论所有区对象实现的共性。其它的实现细节可参考垂直浏览栏例子程序。

区对象除了要实现 IUnknown 和 IClassFactory 两个接口之外,所有的区对象还必须实现以下这几个接口:

IDeskBand 

IObjectWithSite 

IPersistStream

另外,在注册时除了注册它们的CLSID之外,浏览栏和桌面区对象还必须进行组件类别(category)的注册。它决定了对象的类型及其容器。工具栏不需要进行种类注册。归纳起来,需要进行CATID注册的三种区对象是:

区对象类型 组件类型
垂直浏览栏 CATID_InfoBand
水平浏览栏 CATID_CommBand
桌面区 CATID_DeskBand

对于如何注册区对象的进一步讨论请参见注册部分。

如果某个区对象接受用户输入,它还必须实现IInputObject接口。如果要往上下文菜单中添加菜单项目,还必须实现IContextMenu接口。注意:工具栏区对象不支持上下文菜单。

因为区对象实现的是子窗口,所以它们还必须有窗口过程来处理Windows的消息。

区对象可以通过其IOleCommandTarget接口发送命令到它的容器。为了得到这个接口的指针,必须调用容器的IInputObjectSite::QueryInterface方法来请求IID_IoleCommandTarget。然后用IOleCommandTarget::Exec把命令发送到容器。命令组是CGID_DeskBand。当某个区对象的IDeskBand::GetBandInfo方法被调用时,容器用dwBandID参数将一个标示符赋给这个对象。这个标示符被用于IOleCommandTarget::Exec方法调用时所用命令组中的三个命令。目前命令组共支持四个IOleCommandTarget::Exec命令IDs。这四个命令的解释如下:

DBID_BANDINFOCHANGED——Band的信息已改变。参数pvaIn的值应该是最近一次调用所用的band标示符。容器将调用这个标示符所指的band对象的IDeskBand::GetBandInfo方法请求更新的信息。

DBID_MAXIMIZEBAND——容器将最大化band。参数pvaIn的值应该是最近一次调用所用的band标示符。

DBID_SHOWONLY——关闭或打开容器中其它band。参数pvaIn的值为VT_UNKNOWN类型,可以取下列值之一:

描述
pUnk 这个对象IUnknown接口的指针。所有其它的桌面band将被隐藏。
0 隐藏所有桌面band。
1 显示所有桌面band。
DBID_PUSHCHEVRON——目前没有实现。

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

Tags:Windows 对象 Bands

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