Conteneurs de contrôles ActiveX : utilisation de contrôles dans un conteneur autre que de boîte de dialogue
Dans certaines applications, telles qu’une application SDI ou MDI, vous souhaiterez incorporer un contrôle dans une fenêtre de l’application. La fonction Créer un membre de la classe wrapper, insérée par Visual C++, peut créer une instance du contrôle de manière dynamique, sans avoir besoin d’une boîte de dialogue.
La fonction Créer un membre a les paramètres suivants :
lpszWindowName
Pointeur vers le texte à afficher dans la propriété Text ou Caption du contrôle (le cas échéant).
dwStyle
Styles Windows. Pour obtenir une liste complète, consultez CWnd ::CreateControl.
Rect
Spécifie la taille et la position du contrôle.
pParentWnd
Spécifie la fenêtre parente du contrôle, généralement un CDialog
. Elle ne doit pas être NULL.
nID
Spécifie l’ID de contrôle et peut être utilisé par le conteneur pour faire référence au contrôle.
L’un des exemples d’utilisation de cette fonction pour créer dynamiquement un contrôle ActiveX serait dans une vue sous forme d’une application SDI. Vous pouvez ensuite créer une instance du contrôle dans le WM_CREATE
gestionnaire de l’application.
Pour cet exemple, CMyView
il s’agit de la classe d’affichage principale, CCirc
de la classe wrapper et du CIRC. H est l’en-tête (. Fichier H) de la classe wrapper.
L’implémentation de cette fonctionnalité est un processus en quatre étapes.
Pour créer dynamiquement un contrôle ActiveX dans une fenêtre sans boîte de dialogue
Insérez CIRC. H dans CMYVIEW. H, juste avant la définition de
CMyView
classe :#include "circ.h"
Ajoutez une variable membre (de type
CCirc
) à la section protégée de laCMyView
définition de classe située dans CMYVIEW. H:class CMyView : public CView {
protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); } ;
Ajoutez un
WM_CREATE
gestionnaire de messages à la classeCMyView
.Dans la fonction de gestionnaire,
CMyView::OnCreate
effectuez un appel à la fonction duCreate
contrôle à l’aide duthis
pointeur comme fenêtre parente :int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_myCtl.Create(NULL, WS_VISIBLE, CRect(50, 50, 100, 100), this, 0); m_myCtl.SetCaption(_T("Control created")); return 0; }
Regénérez le projet. Un contrôle Circ est créé dynamiquement chaque fois que l’affichage de l’application est créé.