Share via


Conteneurs de contrôle ActiveX : Contrôles ActiveX de programmation dans un conteneur de contrôles ActiveX

Cet article explique le processus pour accéder à méthodes exposé et à propriétés des contrôles ActiveX incorporés.Fondamentalement, vous effectuerez les tâches suivantes :

  1. Insérez un contrôle ActiveX dans le projet de conteneur ActiveX à l'aide de la galerie.

  2. définissez une variable membre (ou tout autre forme d'accès) du même type comme classe wrapper de contrôle ActiveX.

  3. programmez le contrôle ActiveX à l'aide de les fonctions membres prédéfinies de la classe wrapper.

Pour cette discussion, supposez que vous avez créé un projet basé sur des boîtes de dialogue (Container) nommé avec la prise en charge du contrôle ActiveX.Le contrôle montre des exemples de Circ, Circ, est ajouté au projet résultant.

Une fois que le contrôle de Circ est inséré dans le projet (étape 1), insérez une instance du contrôle de Circ dans la boîte de dialogue principale de l'application.

Procédures

Pour ajouter le contrôle de Circ au modèle de boîte de dialogue

  1. Chargez le projet de conteneur de contrôles ActiveX.Pour cet exemple, utilisez le projet d' Container .

  2. Cliquez sur l'onglet Affichage des ressources.

  3. Ouvrez le dossier de Dialog .

  4. Double-cliquez sur le modèle de boîte de dialogue principal.Pour cet exemple, utilisez IDD_CONTAINER_DIALOG.

  5. Cliquez sur l'icône du contrôle de Circ dans la boîte à outils.

  6. Cliquez sur un dans la boîte de dialogue pour insérer le contrôle de Circ.

  7. Dans le menu de Fichier , choisissez Enregistrer tout pour enregistrer les modifications apportées au modèle de boîte de dialogue.

Modifications apportées au projet

Pour activer l'application conteneur d'accéder au contrôle de Circ, Visual C++ ajoute automatiquement le fichier d'implémentation de classe wrapper (CCirc) (.CPP) au projet de conteneur et à l'en-tête de la classe wrapper (. h) fichier au fichier d'en-tête de boîte de dialogue :

#include "circ.h"

L'en-tête de la classe wrapper (. h) fichier

Pour obtenir et définir des propriétés (et appeler des méthodes) pour le contrôle de Circ, la classe wrapper d' CCirc fournit une déclaration de toutes les méthodes et propriétés exposées.Dans l'exemple, ces déclarations sont trouvées dans CIRC.H.L'exemple suivant est la partie de la classe CCirc qui définit les interfaces exposées du contrôle ActiveX :

class CCirc : public CWnd
{


...


// Functions
//

   void AboutBox()
   {
      InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
   }

// Properties
//

   unsigned long GetBackColor()
   {
      unsigned long result;
      GetProperty(DISPID_BACKCOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetBackColor(unsigned long propVal)
   {
      SetProperty(DISPID_BACKCOLOR, VT_UI4, propVal);
   }
   signed char GetCircleShape()
   {
      signed char result;
      GetProperty(0x1, VT_I1, (void*)&result);
      return result;
   }
   void SetCircleShape(signed char propVal)
   {
      SetProperty(0x1, VT_I1, propVal);
   }
   short GetCircleOffset()
   {
      short result;
      GetProperty(0x3, VT_I2, (void*)&result);
      return result;
   }
   void SetCircleOffset(short propVal)
   {
      SetProperty(0x3, VT_I2, propVal);
   }
   CString GetCaption()
   {
      CString result;
      GetProperty(DISPID_CAPTION, VT_BSTR, (void*)&result);
      return result;
   }
   void SetCaption(CString propVal)
   {
      SetProperty(DISPID_CAPTION, VT_BSTR, propVal);
   }
   COleFont GetFont()
   {
      LPDISPATCH result;
      GetProperty(DISPID_FONT, VT_DISPATCH, (void*)&result);
      return COleFont(result);
   }
   void SetFont(LPDISPATCH propVal)
   {
      SetProperty(DISPID_FONT, VT_DISPATCH, propVal);
   }
   unsigned long GetForeColor()
   {
      unsigned long result;
      GetProperty(DISPID_FORECOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetForeColor(unsigned long propVal)
   {
      SetProperty(DISPID_FORECOLOR, VT_UI4, propVal);
   }
   CString GetNote()
   {
      CString result;
      GetProperty(0x4, VT_BSTR, (void*)&result);
      return result;
   }
   void SetNote(CString propVal)
   {
      SetProperty(0x4, VT_BSTR, propVal);
   }
   unsigned long GetFlashColor()
   {
      unsigned long result;
      GetProperty(0x2, VT_UI4, (void*)&result);
      return result;
   }
   void SetFlashColor(unsigned long propVal)
   {
      SetProperty(0x2, VT_UI4, propVal);
   }
};

Ces fonctions peuvent ensuite être appelées des autres procédures de l'application à l'aide de la syntaxe C++ normale.Pour plus d'informations sur l'utilisation de cette fonction membre définie pour accéder aux méthodes de contrôle et aux propriétés, consultez la section programmation du contrôle ActiveX.

Modifications de variables membres au projet

Une fois que celui-ci a été ajouté au projet et incorporé dans un conteneur de boîte de dialogue, il est accessible par d'autres parties du projet.La façon la plus facile d'accéder au contrôle est à créez une variable membre de la classe de boîte de dialogue, CContainerDlg (étape 2), qui est du même type que la classe wrapper ajoutée au projet par Visual C++.Vous pouvez ensuite utiliser la variable membre pour accéder au contrôle incorporé à tout moment.

Lorsque la boîte de dialogue de Ajouter une variable membre ajoute la variable membre d' m_circctl au projet, elle ajoute également les lignes suivantes au fichier d'en-tête (. h) de la classe d' CContainerDlg :

class CContainerDlg : public CDialog
{
   DECLARE_DYNAMIC(CContainerDlg)

public:
   CContainerDlg(CWnd* pParent = NULL);   // standard constructor
   virtual ~CContainerDlg();

   virtual void OnFinalRelease();

// Dialog Data
   enum { IDD = IDD_CONTAINER_DIALOG };

protected:
   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

   DECLARE_MESSAGE_MAP()
   DECLARE_DISPATCH_MAP()
   DECLARE_INTERFACE_MAP()
public:
   CCirc m_circctl;


...


};

En outre, un appel à DDX_Control est automatiquement ajouté à l'implémentation des CContainerDlg d' DoDataExchange:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Programmation du contrôle ActiveX

À ce stade, vous avez inséré le contrôle ActiveX dans votre modèle de boîte de dialogue et avez créé une variable membre pour celui-ci.Vous pouvez maintenant utiliser la syntaxe courante C++ pour accéder aux propriétés et aux méthodes du contrôle incorporé.

Comme remarqué (dans L'en-tête de la classe wrapper (. h) fichier), le fichier d'en-tête (. H) pour la classe wrapper d' CCirc , dans ce cas CIRC.H, contient une liste des fonctions membres que vous pouvez utiliser pour obtenir et définir une valeur de propriété exposée.Les fonctions membres pour les méthodes exposées sont également disponibles.

Un emplacement commun pour modifier les propriétés du contrôle est dans la fonction membre d' OnInitDialog de la classe de boîte de dialogue principale.Cette fonction est appelée juste avant la boîte de dialogue apparaisse et soit utilisée pour initialiser son contenu, notamment l'un de ses contrôles.

L'exemple de code suivant utilise la variable membre d' m_circctl pour modifier les propriétés de légende et de CircleShape du contrôle imbriqué de Circ :

BOOL CContainerDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_circctl.SetCaption(_T("Circ 2 Control"));
   if(!m_circctl.GetCircleShape())
      m_circctl.SetCircleShape(TRUE);

   return TRUE;  // return TRUE unless you set the focus to a control
}

Voir aussi

Concepts

Conteneurs de contrôle ActiveX