conteneurs de contrôle ActiveX : Utilisation de contrôles dans un conteneur de Non-Dialogue
Dans certaines applications, telles qu'une application SDI ou MDI, vous souhaiterez inclure un contrôle dans une fenêtre de l'application. La méthode Create de la classe encapsulatrice, insérée par Visual C++, peut créer une instance de contrôle dynamiquement, sans avoir besoin de la boîte de dialogue.
La méthode Create présente les paramètres suivants :
lpszWindowName
Pointeur vers le texte à afficher dans le texte ou la propriété de légende du contrôle (le cas échéant).dwStyle
Styles de fenêtres Pour une liste plus complète, consultez CWnd::CreateControl.rect
Spécifie la taille et l'emplacement du contrôle.pParentWnd
Spécifie la fenêtre parente du contrôle, généralement CDialog. Ne doit pas être NULL.nID
Spécifie l'ID du contrôle et peut être utilisé par le conteneur pour désigner le contrôle.
Un exemple d'utilisation de cette fonction pour créer dynamiquement un contrôle ActiveX serait en mode formulaire d'une application SDI. Vous pouvez créer ensuite une instance de contrôle dans le gestionnaire WM_CREATE de l'application.
Pour cet exemple, CMyView est la classe d'affichage principale, CCirc est la classe encapsulatrice, et CIRC.H est le fichier d'en-tête (. H) fichier de la classe encapsulatrice.
Implémenter cette fonctionnalité est un processus en quatre phases.
Pour créer dynamiquement un contrôle ActiveX dans une fenêtre non dialogue
Insérez CIRC.H dans CMYVIEW.H, juste avant la définition de classe CMyView:
#include "circ.h"
Ajoutez un attribut (type CCirc) à la section protégée par la définition de classe CMyView trouvée dans CMYVIEW.H :
class CMyView : public CView { ... protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); };
Ajoutez un gestionnaire de messages WM_CREATE à la classe CMyView.
Dans la fonction gestionnaire, CMyView::OnCreate, effectuez un appel à la fonction Create du contrôle à l'aide du pointeur this dans une 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; }
Régénérez le projet. Un contrôle de Circ sera créé dynamiquement chaque fois que la vue de l'application est créée.