Recipientes de controle de ActiveX: ActiveX controles em um contêiner de controle de ActiveX de programação
Este artigo descreve o processo para acessar o exposto métodos e Propriedades controles de ActiveX incorporado.Basicamente, você seguirá estas etapas:
Inserir um controle ActiveX no projeto de contêiner ActiveX usando a Galeria.
Definir uma variável de membro (ou outra forma de acesso) do mesmo tipo que o ActiveX controlar classe wrapper.
Programa de controle de ActiveX usando predefinidos funções de membro da classe wrapper.
Para esta discussão, suponha que criou um projeto baseado em diálogo (chamado de contêiner) com suporte de controle de 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
Para adicionar o controle Circ para o modelo de caixa de diálogo
Carregar projeto de contêiner de controle de ActiveX.Para este exemplo, use o Container projeto.
Clique na guia modo de exibição de recurso.
Abrir o caixa de diálogo pasta.
Clique duas vezes no modelo de caixa de diálogo principal.Para este exemplo, use IDD_CONTAINER_DIALOG.
Clique no ícone de controle Circ na caixa de ferramentas.
Clique em um ponto dentro da caixa de diálogo para inserir o controle Circ.
Do arquivo menu, escolha Salvar todos os para salvar todas as modificações para o modelo de caixa de diálogo.
Modificações no projeto
Para habilitar o aplicativo de contêiner acessar o controle Circ, Visual C++ adiciona automaticamente a classe de wrapper (CCirc) o arquivo de implementação (.CPP) para o projeto de contêiner e o cabeçalho de classe de wrapper (.H) para o arquivo de cabeçalho da caixa de diálogo de arquivo:
#include "circ.h"
O cabeçalho de classe de Wrapper (.H) arquivo
Para obter e definir propriedades (e chamar métodos) para o controle do Circ, o CCirc classe de wrapper fornece uma declaração de propriedades e métodos expostos todos.No exemplo, essas declarações são encontradas em 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 a sintaxe C++ normal.Para obter mais informações sobre como usar essa função de membro definida para acessar propriedades e métodos do controle, consulte a seção Programando o controle de ActiveX.
Modificações de variável de membro ao projeto
Depois que o controle de ActiveX foi adicionado ao projeto e incorporado em um contêiner de caixa de diálogo, pode ser acessado por outras partes do projeto.A maneira mais fácil o controle de acesso é criar uma variável de membro a classe de diálogo, CContainerDlg (etapa 2), isto é do mesmo tipo que a classe adicionada ao projeto pelo Visual C++.Você pode usar a variável de membro para acessar o controle incorporado a qualquer momento.
Quando o Adicionar variável membro caixa de diálogo adiciona o m_circctl membro variável para o projeto, ele também adiciona as seguintes linhas ao arquivo de cabeçalho (.H) do 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 chamada para DDX_Control é automaticamente adicionado para a CContainerDlgda implementação de DoDataExchange:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Programando o controle ActiveX
Neste ponto, você inserido o controle ActiveX no seu modelo de caixa de diálogo e 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 cabeçalho de classe de Wrapper (.H) o arquivo), o arquivo de cabeçalho (.H) para o CCirc classe wrapper, neste caso CIRC.H, contém uma lista de funções de membro que você pode usar para obter e definir qualquer valor da propriedade expostos.Funções de membro para métodos expostos também estão disponíveis.
É um lugar comum para modificar as propriedades do controle no OnInitDialog função de membro da classe caixa de diálogo principal.Essa função é chamada antes da caixa de diálogo aparece e é usada para inicializar seu conteúdo, incluindo qualquer de seus controles.
O seguinte exemplo de código 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
}