Inscription des contrôles OLE

Les contrôles OLE, comme d’autres objets serveur OLE, sont accessibles par d’autres applications prenant en charge OLE. Pour ce faire, inscrivez la bibliothèque et la classe de type du contrôle.

Les fonctions suivantes vous permettent d’ajouter et de supprimer la classe, les pages de propriétés et la bibliothèque de types du contrôle dans la base de données d’inscription Windows :

Inscription des contrôles OLE

Nom Description
AfxOleRegisterControlClass Ajoute la classe du contrôle à la base de données d’inscription.
AfxOleRegisterPropertyPageClass Ajoute une page de propriétés de contrôle à la base de données d’inscription.
AfxOleRegisterTypeLib Ajoute la bibliothèque de types du contrôle à la base de données d’inscription.
AfxOleUnregisterClass Supprime une classe de contrôle ou une classe de page de propriétés de la base de données d’inscription.
AfxOleUnregisterTypeLib Supprime la bibliothèque de types du contrôle de la base de données d’inscription.

AfxOleRegisterTypeLib est généralement appelé dans l’implémentation d’une DLL de contrôle de DllRegisterServer. De même, AfxOleUnregisterTypeLib est appelé par DllUnregisterServer. AfxOleRegisterControlClass, AfxOleRegisterPropertyPageClasset AfxOleUnregisterClass sont généralement appelés par la fonction membre de la UpdateRegistry fabrique de classe ou de la page de propriétés d’un contrôle.

AfxOleRegisterControlClass

Inscrit la classe de contrôle auprès de la base de données d’inscription Windows.

BOOL AFXAPI AfxOleRegisterControlClass(
    HINSTANCE hInstance,
    REFCLSID clsid,
    LPCTSTR pszProgID,
    UINT idTypeName,
    UINT idBitmap,
    int nRegFlags,
    DWORD dwMiscStatus,
    REFGUID tlid,
    WORD wVerMajor,
    WORD wVerMinor);

Paramètres

hInstance
Handle d’instance du module associé à la classe de contrôle.

clsid
ID de classe unique du contrôle.

pszProgID
ID de programme unique du contrôle.

idTypeName
ID de ressource de la chaîne qui contient un nom de type lisible par l’utilisateur pour le contrôle.

idBitmap
ID de ressource de la bitmap utilisée pour représenter le contrôle OLE dans une barre d’outils ou une palette.

nRegFlags
Contient un ou plusieurs des indicateurs suivants :

  • afxRegInsertable Permet au contrôle d’apparaître dans la boîte de dialogue Insérer un objet pour les objets OLE.

  • afxRegApartmentThreading Définit le modèle de thread dans le Registre sur ThreadingModel=Apartment.

  • afxRegFreeThreading Définit le modèle de thread dans le Registre sur ThreadingModel=Free.

    Vous pouvez combiner les deux indicateurs afxRegApartmentThreading et afxRegFreeThreading définir ThreadingModel=Both. Pour plus d’informations sur l’inscription de modèle de thread, consultez InprocServer32 dans le Kit de développement logiciel (SDK) Windows.

Remarque

Dans les versions MFC antérieures à MFC 4.2, le int paramètre nRegFlags était un paramètre BOOL, bInsertable, qui permettait ou non l’insertion du contrôle à partir de la boîte de dialogue Insérer un objet.

dwMiscStatus
Contient un ou plusieurs des indicateurs d’état suivants (pour une description des indicateurs, consultez l’énumération OLEMISC dans le Kit de développement logiciel (SDK) Windows) :

  • 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

glissement
ID unique de la classe de contrôle.

wVerMajor
Numéro de version principal de la classe de contrôle.

wVerMinor
Numéro de version secondaire de la classe de contrôle.

Valeur de retour

Différent de zéro si la classe de contrôle a été inscrite ; sinon 0.

Notes

Cela permet au contrôle d’être utilisé par des conteneurs prenant en charge le contrôle OLE. AfxOleRegisterControlClass met à jour le Registre avec le nom et l’emplacement du contrôle sur le système et définit également le modèle de thread pris en charge par le contrôle dans le Registre. Pour plus d’informations, consultez la note technique 64, « Threading de modèle d’appartement dans les contrôles OLE » et à propos des processus et des threads dans le Kit de développement logiciel (SDK) Windows.

Exemple

// 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);
}

L’exemple ci-dessus montre comment AfxOleRegisterControlClass utiliser l’indicateur pour insérer et l’indicateur du modèle d’appartement ORed ensemble pour créer le sixième paramètre :

afxRegInsertable | afxRegApartmentThreading,

Le contrôle s’affiche dans la boîte de dialogue Insérer un objet pour les conteneurs activés, et il est compatible avec le modèle d’appartement. Les contrôles prenant en charge les modèles d’appartement doivent s’assurer que les données de classe statique sont protégées par des verrous, de sorte qu’un contrôle d’un appartement accède aux données statiques, qu’il n’est pas désactivé par le planificateur avant qu’il ne soit terminé, et qu’une autre instance de la même classe commence à utiliser les mêmes données statiques. Tous les accès aux données statiques sont entourés de code de section critique.

Spécifications

En-tête afxctl.h

AfxOleRegisterPropertyPageClass

Inscrit la classe de page de propriétés avec la base de données d’inscription Windows.

BOOL AFXAPI AfxOleRegisterPropertyPageClass(
   HINSTANCE hInstance,
   REFCLSID  clsid,
   UINT idTypeName,
   int nRegFlags);

Paramètres

hInstance
Handle d’instance du module associé à la classe de page de propriétés.

clsid
ID de classe unique de la page de propriétés.

idTypeName
ID de ressource de la chaîne qui contient un nom lisible par l’utilisateur pour la page de propriétés.

nRegFlags
Peut contenir l’indicateur :

  • afxRegApartmentThreading Définit le modèle de thread dans le Registre sur ThreadingModel = Apartment.

Remarque

Dans les versions MFC antérieures à MFC 4.2, le int paramètre nRegFlags n’était pas disponible. Notez également que l’indicateur afxRegInsertable n’est pas une option valide pour les pages de propriétés et entraîne une assertion dans MFC si elle est définie

Valeur de retour

Différent de zéro si la classe de contrôle a été inscrite ; sinon 0.

Notes

Cela permet à la page de propriétés d’être utilisée par des conteneurs prenant en charge le contrôle OLE. AfxOleRegisterPropertyPageClass met à jour le Registre avec le nom de la page de propriétés et son emplacement sur le système et définit également le modèle de thread pris en charge par le contrôle dans le Registre. Pour plus d’informations, consultez la note technique 64, « Threading de modèle d’appartement dans les contrôles OLE » et à propos des processus et des threads dans le Kit de développement logiciel (SDK) Windows.

Spécifications

En-tête afxctl.h

AfxOleRegisterTypeLib

Inscrit la bibliothèque de types auprès de la base de données d’inscription Windows et permet à la bibliothèque de types d’être utilisée par d’autres conteneurs qui sont conscients du contrôle OLE.

BOOL AfxOleRegisterTypeLib(
    HINSTANCE hInstance,
    REFGUID tlid,
    LPCTSTR pszFileName = NULL,
    LPCTSTR pszHelpDir  = NULL);

Paramètres

hInstance
Handle d’instance de l’application associée à la bibliothèque de types.

glissement
ID unique de la bibliothèque de types.

pszFileName
Pointe vers le nom de fichier facultatif d’une bibliothèque de types localisée (. Fichier TLB) pour le contrôle.

pszHelpDir
Nom du répertoire dans lequel se trouve le fichier d’aide de la bibliothèque de types. Si la valeur est NULL, le fichier d’aide est supposé se trouver dans le même répertoire que la bibliothèque de types elle-même.

Valeur de retour

Différent de zéro si la bibliothèque de types a été inscrite ; sinon 0.

Notes

Cette fonction met à jour le Registre avec le nom de la bibliothèque de types et son emplacement sur le système.

Exemple

// 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);
}

Spécifications

En-tête afxdisp.h

AfxOleUnregisterClass

Supprime l’entrée de classe de page de contrôle ou de propriété de la base de données d’inscription Windows.

BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);

Paramètres

clsID
ID de classe unique de la page de contrôle ou de propriété.

pszProgID
ID de programme unique de la page de contrôle ou de propriété.

Valeur de retour

Différent de zéro si la classe de page de contrôle ou de propriété a été annulée avec succès ; sinon 0.

Spécifications

En-tête afxctl.h

AfxOleUnregisterTypeLib

Appelez cette fonction pour supprimer l’entrée de bibliothèque de types de la base de données d’inscription Windows.

BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);

Paramètres

tlID
ID unique de la bibliothèque de types.

Valeur de retour

Différent de zéro si la bibliothèque de types a été correctement annulée ; sinon 0.

Exemple

// 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;
}

Spécifications

En-tête afxdisp.h

Voir aussi

Macros et globals