Conteneurs de contrôle ActiveX : Utilisation de contrôles dans un conteneur non Dialogue
Dans certaines applications, telles qu'une application SDI ou MDI, vous devez inclure un contrôle dans une fenêtre de l'application.La fonction membre de Créer de la classe wrapper, l'insertion par Visual C++, peut créer une instance du contrôle dynamiquement, sans nécessiter de boîte de dialogue.
La fonction membre de Créer a les paramètres suivants :
lpszWindowName
Un pointeur vers le texte à afficher dans la propriété de texte ou de la légende du contrôle (le cas échéant).dwStyle
Styles Windows.Pour obtenir une liste complète, consultez le CWnd::CreateControl.rect
Spécifie la taille et la position du contrôle.pParentWnd
Spécifie la fenêtre du contrôle parent, généralement CDialog.Il ne doit pas être NULL.nID
Spécifie l'ID du contrôle et peut être utilisé par le conteneur pour faire référence au contrôle.
Un exemple d'utilisation de cette fonction pour créer dynamiquement un contrôle ActiveX est en mode formulaire d'une application SDI.Vous pouvez créer ensuite une instance du contrôle dans le gestionnaire d' WM_CREATE de l'application.
Pour cet exemple, CMyView est la classe d'affichage principale, CCirc est la classe wrapper, et CIRC.H est l'en-tête (. h) fichier de la classe wrapper.
Implémentation de cette fonctionnalité est un processus à quatre phases.
Pour créer dynamiquement un contrôle ActiveX dans une fenêtre de non-dialogue
Insérez CIRC.H dans CMYVIEW.H, juste avant la définition de classe d' CMyView :
#include "circ.h"
Ajoutez une variable membre (de type CCirc) dans la section protégée de la définition de classe d' CMyView trouve dans CMYVIEW.H :
class CMyView : public CView { ... protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); };
Ajoutez un gestionnaire de messages d' WM_CREATE à la classe CMyView.
Dans la fonction gestionnaire, CMyView::OnCreate, la création d'un appel à la fonction d' Create du contrôle à l'aide de le pointeur de this 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; }
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.