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
, AfxOleRegisterPropertyPageClass
et 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
etafxRegFreeThreading
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