Registrace ovládacích prvků OLE
K ovládacím prvkům OLE, jako jsou jiné objekty serveru OLE, lze přistupovat jinými aplikacemi podporujícími OLE. Toho dosáhnete registrací knihovny typů a třídy ovládacího prvku.
Následující funkce umožňují přidat a odebrat třídu ovládacího prvku, stránky vlastností a knihovnu typů v registrační databázi Systému Windows:
Registrace ovládacích prvků OLE
Název | Popis |
---|---|
AfxOleRegisterControlClass | Přidá třídu ovládacího prvku do registrační databáze. |
AfxOleRegisterPropertyPageClass | Přidá stránku vlastností ovládacího prvku do registrační databáze. |
AfxOleRegisterTypeLib | Přidá knihovnu typů ovládacího prvku do registrační databáze. |
AfxOleUnregisterClass | Odebere třídu ovládacího prvku nebo třídu stránky vlastností z registrační databáze. |
AfxOleUnregisterTypeLib | Odebere knihovnu typů ovládacího prvku z registrační databáze. |
AfxOleRegisterTypeLib
je obvykle volána v ovládací dll implementace DllRegisterServer
. Podobně je AfxOleUnregisterTypeLib
volána DllUnregisterServer
. AfxOleRegisterControlClass
, AfxOleRegisterPropertyPageClass
a AfxOleUnregisterClass
jsou obvykle volány UpdateRegistry
členské funkce objektu třídy ovládacího prvku nebo stránky vlastností.
AfxOleRegisterControlClass
Zaregistruje třídu ovládacího prvku v registrační databázi Systému Windows.
BOOL AFXAPI AfxOleRegisterControlClass(
HINSTANCE hInstance,
REFCLSID clsid,
LPCTSTR pszProgID,
UINT idTypeName,
UINT idBitmap,
int nRegFlags,
DWORD dwMiscStatus,
REFGUID tlid,
WORD wVerMajor,
WORD wVerMinor);
Parametry
hInstance
Popisovač instance modulu přidruženého ke třídě ovládacího prvku.
clsid
Jedinečné ID třídy ovládacího prvku.
pszProgID
Jedinečné ID programu ovládacího prvku.
idTypeName
ID prostředku řetězce, který obsahuje název typu čitelný uživatelem pro ovládací prvek.
idBitmap
ID prostředku rastrového obrázku použitého k reprezentaci ovládacího prvku OLE na panelu nástrojů nebo paletě.
nRegFlags
Obsahuje jeden nebo více následujících příznaků:
afxRegInsertable
Umožňuje, aby se ovládací prvek zobrazil v dialogovém okně Vložit objekt pro objekty OLE.afxRegApartmentThreading
Nastaví model threadingu v registru na ThreadingModel=Apartment.afxRegFreeThreading
Nastaví model threadingu v registru na ThreadingModel=Free.Tyto dva příznaky
afxRegApartmentThreading
můžete zkombinovat aafxRegFreeThreading
nastavit ThreadingModel=Both. Další informace o registraci modelu vláken najdete v tématu InprocServer32 v sadě Windows SDK.
Poznámka:
Ve verzích MFC starších než MFC 4.2 int
byl nRegFlags parametrem BOOL, bInsertable, který povolil nebo nepovolil vložení ovládacího prvku z dialogového okna Vložit objekt.
dwMiscStatus
Obsahuje jeden nebo více následujících příznaků stavu (popis příznaků, viz výčet OLEMISC v sadě Windows SDK):
OLEMISC_RECOMPOSEONRESIZE
OLEMISC_ONLYICONIC
OLEMISC_INSERTNOTREPLACE
OLEMISC_STATIC
OLEMISC_CANTLINKINSIDE
OLEMISC_CANLINKBYOLE1
OLEMISC_ISLINKOBJECT
OLEMISC_INSIDEOUT
OLEMISC_ACTIVATEWHENVISIBLE
OLEMISC_RENDERINGISDEVICEINDEPENDENT
OLEMISC_INVISIBLEATRUNTIME
OLEMISC_ALWAYSRUN
OLEMISC_ACTSLIKEBUTTON
OLEMISC_ACTSLIKELABEL
OLEMISC_NOUIACTIVATE
OLEMISC_ALIGNABLE
OLEMISC_IMEMODE
OLEMISC_SIMPLEFRAME
OLEMISC_SETCLIENTSITEFIRST
tlid
Jedinečné ID třídy ovládacího prvku.
wVerMajor
Číslo hlavní verze třídy ovládacího prvku.
wVerMinor
Číslo podverze třídy ovládacího prvku.
Návratová hodnota
Nenulové, pokud byla třída řízení zaregistrována; jinak 0.
Poznámky
To umožňuje použití ovládacího prvku kontejnery, které jsou s podporou řízení OLE. AfxOleRegisterControlClass
aktualizuje registr názvem a umístěním ovládacího prvku v systému a také nastaví model vláken, který ovládací prvek podporuje v registru. Další informace naleznete v technické poznámce 64, "Apartment-Model Threading in OLE Controls" a About Processes and Threads in the Windows SDK.
Příklad
// Member function implementation of class COleObjectFactory::UpdateRegistry
//
BOOL CMyAxCtrl::CMyAxCtrlFactory::UpdateRegistry(BOOL bRegister)
{
// TODO: Verify that your control follows apartment-model threading rules.
// Refer to MFC TechNote 64 for more information.
// If your control does not conform to the apartment-model rules, then
// you must modify the code below, changing the 6th parameter from
// afxRegInsertable | afxRegApartmentThreading to afxRegInsertable.
if (bRegister)
return AfxOleRegisterControlClass(
AfxGetInstanceHandle(),
m_clsid,
m_lpszProgID,
IDS_NVC_MFCAXCTL,
IDB_NVC_MFCAXCTL,
afxRegInsertable | afxRegApartmentThreading,
_dwMyOleMisc,
_tlid,
_wVerMajor,
_wVerMinor);
else
return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}
Výše uvedený příklad ukazuje, jak AfxOleRegisterControlClass
se volá s příznakem pro vložení a příznakem pro model apartment ORed společně vytvořit šestý parametr:
afxRegInsertable | afxRegApartmentThreading,
Ovládací prvek se zobrazí v dialogovém okně Vložit objekt pro povolené kontejnery a bude mít přehled o modelu bytu. Ovládací prvky pracující s modelem musí zajistit, aby byla statická data třídy chráněna zámky, takže zatímco ovládací prvek v jednom bytě přistupuje ke statickým datům, není plánovač před dokončením zakázán a jiná instance stejné třídy začne používat stejná statická data. Veškerý přístup ke statickým datům bude obklopen kritickým kódem oddílu.
Požadavky
Záhlaví afxctl.h
AfxOleRegisterPropertyPageClass
Zaregistruje třídu stránky vlastností v registrační databázi Systému Windows.
BOOL AFXAPI AfxOleRegisterPropertyPageClass(
HINSTANCE hInstance,
REFCLSID clsid,
UINT idTypeName,
int nRegFlags);
Parametry
hInstance
Popisovač instance modulu přidruženého ke třídě stránky vlastnosti.
clsid
Jedinečné ID třídy stránky vlastnosti.
idTypeName
ID prostředku řetězce, který obsahuje uživatelsky čitelný název stránky vlastností.
nRegFlags
Může obsahovat příznak:
afxRegApartmentThreading
Nastaví model threadingu v registru na ThreadingModel = Apartment.
Poznámka:
Ve verzích MFC starších než MFC 4.2 int
nebyl parametr nRegFlags k dispozici. Všimněte si také, že afxRegInsertable
příznak není platná možnost pro stránky vlastností a způsobí ASSERT v prostředí MFC, pokud je nastavena.
Návratová hodnota
Nenulové, pokud byla třída řízení zaregistrována; jinak 0.
Poznámky
To umožňuje, aby stránky vlastností byly používány kontejnery, které jsou s podporou řízení OLE. AfxOleRegisterPropertyPageClass
aktualizuje registr názvem stránky vlastností a jeho umístěním v systému a také nastaví model vláken, který ovládací prvek podporuje v registru. Další informace naleznete v technické poznámce 64, "Apartment-Model Threading in OLE Controls" a About Processes and Threads in the Windows SDK.
Požadavky
Záhlaví afxctl.h
AfxOleRegisterTypeLib
Zaregistruje knihovnu typů v databázi pro registraci systému Windows a umožňuje, aby knihovnu typů používaly jiné kontejnery, které jsou s podporou řízení OLE.
BOOL AfxOleRegisterTypeLib(
HINSTANCE hInstance,
REFGUID tlid,
LPCTSTR pszFileName = NULL,
LPCTSTR pszHelpDir = NULL);
Parametry
hInstance
Popisovač instance aplikace přidružené ke knihovně typů.
tlid
Jedinečné ID knihovny typů.
pszFileName
Odkazuje na volitelný název souboru lokalizované knihovny typů (. Soubor TLB) pro ovládací prvek.
pszHelpDir
Název adresáře, kde lze najít soubor nápovědy pro knihovnu typů. Pokud má hodnotu NULL, předpokládá se, že soubor nápovědy je ve stejném adresáři jako samotná knihovna typů.
Návratová hodnota
Nenulové, pokud byla knihovna typů zaregistrována; jinak 0.
Poznámky
Tato funkce aktualizuje registr názvem knihovny typů a jeho umístěním v systému.
Příklad
// Type library guid definition.
const GUID CDECL BASED_CODE _tlid =
{ 0x77E58ED8, 0xA2C0, 0x4C13, { 0xB6, 0xC1, 0xBA, 0xD1, 0x19, 0xAF, 0xE3, 0xF1 } };
// Registers type library and the interfaces
// in it, afxctl.h needs to be included
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);
// CMFCAutomation.tlb should be in the same directory as exe module.
// last param can be null if help file associated w/ tlb is in same dir as .tlb
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid,
_T("CMFCAutomation.tlb"), NULL))
{
return ResultFromScode(SELFREG_E_TYPELIB);
}
Požadavky
Hlavička afxdisp.h
AfxOleUnregisterClass
Odebere položku třídy ovládacího prvku nebo stránky vlastností z registrační databáze systému Windows.
BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);
Parametry
clsID
Jedinečné ID třídy ovládacího prvku nebo stránky vlastností.
pszProgID
Jedinečné ID programu ovládacího prvku nebo stránky vlastností.
Návratová hodnota
Nenulové, pokud byla třída stránky ovládacího prvku nebo vlastnosti úspěšně zrušena registrace; jinak 0.
Požadavky
Záhlaví afxctl.h
AfxOleUnregisterTypeLib
Voláním této funkce odeberete položku knihovny typů z registrační databáze Systému Windows.
BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);
Parametry
tlID
Jedinečné ID knihovny typů.
Návratová hodnota
Nenulové, pokud byla knihovna typů úspěšně zrušena. jinak 0.
Příklad
// Type library GUID, corresponds to the uuid attribute of the library
// section in the .odl file.
const GUID CDECL BASED_CODE _tlid =
{0xA44774E8, 0xAE00, 0x451F, {0x96, 0x1D, 0xC7, 0xD2, 0xD2, 0x58, 0xA0, 0x75}};
// Type library major version number, number on the left of decimal
// point, in version attribute of the library section in .odl file.
const WORD _wVerMajor = 1;
// Type library minor version number, number on the right of decimal
// point, in version attribute of the library section in .odl file.
const WORD _wVerMinor = 0;
STDAPI DllUnregisterServer(void)
{
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);
return NOERROR;
}
Požadavky
Hlavička afxdisp.h