组件的类别
因为客户需要对组件的功能有更加精细和实用的要求,所以微软提出了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;
}