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:
Inserir um controle ActiveX para o projeto de contêiner ActiveX usando a Galeria.
Definir uma variável de membro (ou Outros forma de acesso) do mesmo tipo que o controle ActiveX classe wrapper.
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
Para adicionar o controle Circ ao modelo de caixa de diálogo
Carregar o projeto de contêiner de controle ActiveX.Para esse exemplo, use o Container projeto.
clicar na guia modo de exibição de recurso.
Abra o Caixa de diálogo pasta.
clicar duas vezes no modelo de caixa de diálogo principal.Para esse exemplo, use IDD_CONTAINER_DIALOG.
clicar no ícone de controle Circ na caixa de ferramentas.
clicar um ponto dentro da caixa de diálogo para inserir o controle Circ.
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
}