Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo descreve o processo para acessar os métodos expostos e propriedades de controles ActiveX incorporados.
Importante
ActiveX é uma tecnologia herdada que não deve ser usada para novos desenvolvimentos. Para obter mais informações sobre tecnologias modernas que substituem o ActiveX, consulte Controles ActiveX.
Basicamente, você seguirá estes passos:
Insira um controle ActiveX no projeto de contêiner ActiveX usando a Galeria.
Defina uma variável de membro (ou outra forma de acesso) do mesmo tipo que a classe wrapper do controle ActiveX.
Programe o controle ActiveX usando funções de membro predefinidas da classe wrapper.
Para esta discussão, suponha que você criou um projeto baseado em diálogo (chamado Container) com suporte a controle ActiveX. O controle de amostra Circ, Circ, será adicionado ao projeto resultante.
Depois que o controle Circ for 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 diálogo
Carregue o projeto de contêiner de controle ActiveX. Para este exemplo, use o
Containerprojeto.Clique na guia Modo de Exibição de Recursos.
Abra a pasta Diálogo .
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.
No menu Arquivo , escolha Salvar tudo para salvar todas as modificações no modelo de caixa de diálogo.
Modificações ao Projeto
Para permitir que a aplicação Container aceda ao controlo Circ, o Visual C++ adiciona automaticamente o ficheiro de implementação da classe wrapper (.CPP) ao projeto Container e o ficheiro de cabeçalho da classe wrapper (.H) ao ficheiro de cabeçalho da caixa de diálogo.
#include "circ.h"
Ficheiro de Cabeçalho da Classe Wrapper (.H)
Para obter e definir propriedades (e invocar métodos) para o controle Circ, a CCirc classe wrapper fornece uma declaração de todos os métodos e propriedades expostos. No exemplo, estas declarações encontram-se 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 a partir de outros procedimentos do aplicativo usando sintaxe C++ normal. Para obter mais informações sobre como usar essa função de membro definida para acessar os métodos e propriedades do controle, consulte a seção Programando o controle ActiveX.
Modificações da variável membro no projeto
Uma vez que o controle ActiveX foi adicionado ao projeto e incorporado em um contêiner de caixa de diálogo, ele pode ser acessado por outras partes do projeto. A maneira mais fácil de acessar o controle é criar uma variável membro da classe de diálogo, CContainerDlg (etapa 2), que é do mesmo tipo que a classe wrapper adicionada ao projeto pelo Visual C++. Em seguida, você pode usar a variável de membro para acessar o controle incorporado a qualquer momento.
Quando a caixa de diálogo Adicionar variável de membro adiciona a variável de membro m_circctl ao projeto, ela também adiciona as seguintes linhas ao arquivo de cabeçalho (. H) da 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 adicionada à implementação de CContainerDlgDoDataExchange:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
Programando o controle ActiveX
Neste ponto, você inseriu o controle ActiveX em seu modelo de diálogo e criou uma variável de membro para ele. Agora você pode usar sintaxe C++ comum para acessar as propriedades e métodos do controle incorporado.
Conforme observado (em The Wrapper Class Header (.H) Ficheiro), o arquivo de cabeçalho (.H) para a 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 de propriedade exposto. Funções de membro para métodos expostos também estão disponíveis.
Um local comum para modificar as propriedades do controle é na OnInitDialog função de membro da classe de diálogo principal. Esta função é chamada imediatamente antes da caixa de diálogo aparecer e é usada para inicializar seu conteúdo, incluindo qualquer um de seus controles.
O exemplo de código a seguir usa a variável membro m_circctl para modificar as propriedades Caption 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
}