Sdílet prostřednictvím


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, AfxOleRegisterPropertyPageClassa 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 a afxRegFreeThreading 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

Viz také

Makra a globální objekty