組件的類別
因爲客戶需要對組件的功能有更加精細和實用的要求,所以微軟提出了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;
}