Contêineres de controle ActiveX: programando controles ActiveX em um contêiner de controle ActiveX
Este artigo descreve o processo para acessar métodos expostas e propriedades de controles ActiveX inseridos. Basicamente, você seguirá estas etapas:
Inserir um controle ActiveX no projeto do contêiner ActiveX usando a galeria do.
Definir uma variável de membro (ou outro formulário de acesso) do mesmo tipo que a classe de invólucro do controle ActiveX.
Programe o controle ActiveX usando as funções de membro predefinidas da classe de invólucro.
Para esta discussão, suponhamos que você criou um projeto baseado diálogo- (Contêiner denominado) com suporte do controle ActiveX. O controle de exemplo de Circ, Circ, será adicionado ao projeto resultante.
Uma vez que o controle de Circ é inserido no projeto (etapa 1), insira uma instância do controle de Circ na caixa de diálogo principal do aplicativo.
Procedimentos
Para adicionar o controle de Circ ao modelo da caixa de diálogo
Carregar o projeto do contêiner do controle ActiveX. Para esse exemplo, use o projeto de Container .
Clique na guia da exibição de recursos.
Abra a pasta de Caixa de Diálogo .
Clique duas vezes no modelo principal da caixa de diálogo. Para esse exemplo, use IDD_CONTAINER_DIALOG.
Clique no ícone de controle de Circ na caixa de ferramentas.
Clique em um ponto dentro da caixa de diálogo para inserir o controle de Circ.
No menu de Arquivo , escolha Salvar Tudo para salvar todas as alterações no modelo da caixa de diálogo.
Alterações no projeto
Para habilitar o aplicativo de contêiner acessar o controle de Circ, Visual C++ adiciona automaticamente o arquivo de implementação da classe de invólucro (CCirc) (.CPP) ao projeto do contêiner e ao cabeçalho da classe de invólucro (. H) arquivo para o arquivo de cabeçalho da caixa de diálogo:
#include "circ.h"
O cabeçalho da classe de invólucro (. H) Arquivo
Para obter e definir propriedades para invocar métodos (e) para o controle de Circ, a classe de invólucro de CCirc fornece uma declaração de todos os métodos e propriedades expostas. No exemplo, essas instruçõ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 podem ser chamadas de procedimentos de outro aplicativo usando a sintaxe normal C++. Para obter mais informações sobre como usar essa função de membro definida para acessar os métodos e as propriedades de controle, consulte a seção Programando o controle ActiveX.
Alterações variáveis de membro ao projeto
Uma vez que o controle ActiveX foi adicionado ao projeto e inserido em um contêiner da caixa de diálogo, pode ser acessado por outras partes do projeto. A maneira mais fácil de acessar o controle é a crie uma variável de membro da classe da caixa de diálogo, CContainerDlg (etapa 2), que é do mesmo tipo que a classe de invólucro adicionada ao projeto pelo Visual C++. Você pode usar a variável de membro para acessar a qualquer momento o controle inserido.
Quando a caixa de diálogo de Adicionar Variável de Membro adiciona a variável de membro de m_circctl ao projeto, também adiciona as seguintes linhas no arquivo de cabeçalho (. H) da classe de 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;
...
};
Além disso, uma chamada a DDX_Control é adicionado automaticamente à implementação de CContainerDlg de DoDataExchange:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Programando o controle ActiveX
Neste momento, você insere o controle ActiveX no modelo da caixa de diálogo e criar uma variável de membro para ele. Agora você pode usar a sintaxe comum do C++ para acessar as propriedades e os métodos de controle inserido.
Como indicado em O cabeçalho da classe de invólucro (. H) Arquivo(), o arquivo de cabeçalho (. H) para a classe de invólucro de CCirc , nesse caso, CIRC.H contém uma lista de funções de membro que podem ser usadas para obter e definir qualquer valor da propriedade exposto. As funções de membro para métodos expostos também estão disponíveis.
Um local comum para alterar as propriedades do controle está na função de membro de OnInitDialog da classe principal da caixa de diálogo. Essa função é chamada imediatamente antes da caixa de diálogo é exibida e é usada para inicializar o seu conteúdo, incluindo alguns de seus controles.
O exemplo de código usa a variável de membro de m_circctl para alterar as propriedades da legenda e de CircleShape de controle inserido 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
}