ATL实战开发指南---2.4

组件的类别

因为客户需要对组件的功能有更加精细和实用的要求,所以微软提出了Compenent Categories(组件类别)的机制。

该机制的规范中提出了对不同组件系统定义的类别和用户定义的类别。这些信息仍然被存储在注册表中。

组件类别通过使用一个类别标识符CATID来唯一标定,同CATID一起出现的还有一个本地标识locale ID(由一个十六机制的数字串和用户可读的字符串指定的)。

微软的一个工具OLEVIEW可以根据组件类别来显示组件。

如何在程序中实现对组件进行分类呢?下面我们详细说明:

为了支持组件类别和方便使用,微软定义了两个新的COM接口 :ICatRegister 和 ICatInformation . 更令人欣慰的是,微软在组件分类管理器(CCM)中实现了这些接口。这说明两点: 1. CATID的已经有了。 2. 我们只需要直接使用可以了。

头文件comcat.h中已经定义了当前的一些CATID.那么我们下面来看一下一个实例。关于接口里面的方法,自己可以去看,或者google一下

typedef struct tagCATEGORYINFO
{
    CATID  catid;
    LCID    lcid;
    OLECHAR  szDescription[128];
}CATEGORYINFO;

#include "comcat.h"

HRESULT CreateComponentCategory(CATID catid, WCHAR*  catDescription)
{
    ICategory* pcr = NULL;
    HRESULT hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);

if (FAILED(hr))
    return hr;
CATEGORYINFO catinfo;
catinfo.catid = catid;
catinfo.lcid = 0x0409;  // English locale ID in hex
int len = wcslen(catDescription);
if (len > 127) len = 127;
wcsncpy(catinfo.szDescription, catDescription, len);
catinfo.szDescription[len] = L'\0';
hr = pcr -> RegisterCategories(1, &catinfo);
pc -> Release();
return hr;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值