Compartilhar via


Recipientes de controle ActiveX: Programação controles ActiveX em um recipiente controle ActiveX

Este artigo descreve o processo para acessar o expostos métodos and Propriedades de controles ActiveX incorporados.Basicamente, você irá siga estas etapas:

  1. Inserir um controle ActiveX para o projeto de contêiner ActiveX usando a Galeria.

  2. Definir uma variável de membro (ou Outros forma de acesso) do mesmo tipo que o controle ActiveX classe wrapper.

  3. Programar o controle ActiveX usando predefinidos funções de membro da classe wrapper.

Para esta discussão, suponha que você criou um projeto dialog-based (chamado de contêiner) com suporte a controles ActiveX.O controle de exemplo Circ, Circ, será adicionado ao projeto resultante.

Depois que o controle Circ é inserido no projeto (etapa 1), insira uma instância do controle Circ na caixa de diálogo principal do aplicativo.

Procedimentos

  1. Carregar o projeto de contêiner de controle ActiveX.Para esse exemplo, use o Container projeto.

  2. clicar na guia modo de exibição de recurso.

  3. Abra o Caixa de diálogo pasta.

  4. clicar duas vezes no modelo de caixa de diálogo principal.Para esse exemplo, use IDD_CONTAINER_DIALOG.

  5. clicar no ícone de controle Circ na caixa de ferramentas.

  6. clicar um ponto dentro da caixa de diálogo para inserir o controle Circ.

  7. From a Arquivo menu, escolher Salvar todos para salvar todas as modificações ao modelo de caixa de diálogo.

Modificações para o projeto

Para ativar o aplicativo de contêiner acesso controle Circ, Visual C++ adiciona automaticamente a classe de invólucro (CCirc) arquivo (.CPP) de implementação para o projeto de contêiner e o arquivo de cabeçalho (.H) de classe wrapper para o arquivo de cabeçalho de caixa de diálogo:

#include "circ.h"

O arquivo de cabeçalho classe wrapper (.H)

Para obter e conjunto as propriedades (e chamar métodos) para o controle Circ, a CCirc classe wrapper fornece uma declaração de propriedades e métodos expostos tudo. No exemplo, essas declarações são encontradas no CIRC.H.O exemplo a seguir é a parte da classe CCirc que define as interfaces expostas do controle 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);
   }
};

Essas funções, em seguida, podem ser chamadas de outros procedimentos do aplicativo usando sintaxe normal do C++.Para obter mais informações sobre como usar a função de membro definido como acesso do controle de métodos e propriedades, consulte a seção Programar o controle ActiveX.

Modificações variável membro para o projeto

Depois que o controle ActiveX tem sido adicionado ao projeto a e incorporado em um contêiner de caixa de diálogo, pode ser acessado por outras partes do projeto.A maneira esistema autônomoiest para acessar o controle é criar uma variável de membro do clsistema autônomos a caixa de diálogo, CContainerDlg (etapa 2), ou seja do mesmo tipo sistema autônomo clsistema autônomos o wrapper adicionados ao projeto Visual C++. Você pode usar a variável de membro para acesso o controle incorporado a qualquer momento.

Quando o Adicionar variável de membro caixa de diálogo adiciona o m_circctl variável de membro para o projeto, ele também adiciona as seguintes linhas ao arquivo de cabeçalho (.H) dos CContainerDlg classe:

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;


...


};

Além disso, uma telefonar para DDX_Control é adicionado automaticamente ao CContainerDlgda implementação do DoDataExchange:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

Programando o controle ActiveX

Neste ponto, ter inserido o controle ActiveX no seu modelo de caixa de diálogo e de ter criado uma variável de membro para ele.Agora você pode usar sintaxe C++ comum para acessar propriedades e métodos do controle incorporado.

Conforme observado (em O arquivo de cabeçalho (.H) Class Wrapper), o arquivo de cabeçalho (.H) para o CCirc classe de invólucro em CIRC.H neste caso, contém uma lista de funções de membro que você pode usar para obter e conjunto qualquer valor da propriedade expostos. Funções de membro para métodos expostos também estão disponível.

Um lugar comum para modificar as propriedades do controle é no OnInitDialog função de membro da classe de caixa de diálogo principal. Essa função é chamada imediatamente antes da caixa de diálogo aparece e é usada para inicializar seu Sumário, incluindo qualquer de seus controles.

O exemplo de código a seguir usa o m_circctl variável de membro para modificar as propriedades legenda e CircleShape do controle Circ incorporado:

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
}

Consulte também

Conceitos

Recipientes de controle ActiveX