Contêineres de controle ActiveX: usando controles em um contêiner que não seja da caixa de diálogo
Em alguns aplicativos, como aplicativos SDI ou MDI, você vai querer inserir um controle em uma janela do aplicativo. A função membro Create da classe wrapper, inserida pelo Visual C++, pode criar uma instância do controle dinamicamente, sem a necessidade de uma caixa de diálogo.
A função membro Create tem os seguintes parâmetros:
lpszWindowName
Um ponteiro para o texto a ser exibido na propriedade de Texto ou Legenda do controle (se houver).
dwStyle
Estilos do Windows. Para obter uma lista completa, consulte CWnd::CreateControl.
rect
Especifica o tamanho e a posição do controle.
pParentWnd
Especifica a janela pai do controle, geralmente um CDialog
. Não pode ser NULL.
Nid
Especifica a ID do controle e pode ser usada pelo contêiner para fazer referência ao controle.
Um exemplo de uso dessa função para criar dinamicamente um controle ActiveX seria uma exibição de formulário de um aplicativo SDI. Você poderia, então, criar uma instância do controle no manipulador WM_CREATE
do aplicativo.
Para este exemplo, CMyView
é a classe de exibição principal, CCirc
é a classe wrapper e CIRC.H é o arquivo de cabeçalho (.H) da classe wrapper.
Implementar esse recurso é um processo de quatro etapas.
Para criar dinamicamente um controle ActiveX em uma janela que não é uma caixa de diálogo
Insira CIRC.H em CMYVIEW.H logo antes da definição da classe
CMyView
:#include "circ.h"
Adicione uma variável membro (do tipo
CCirc
) à seção protegida da definição de classeCMyView
localizada em CMYVIEW.H:class CMyView : public CView {
protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); } ;
Adicione um manipulador de mensagens
WM_CREATE
à classeCMyView
.Na função de manipulador,
CMyView::OnCreate
, faça uma chamada para a funçãoCreate
do controle usando o ponteirothis
como a janela pai:int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_myCtl.Create(NULL, WS_VISIBLE, CRect(50, 50, 100, 100), this, 0); m_myCtl.SetCaption(_T("Control created")); return 0; }
Recompile o projeto. Um controle Circ será criado dinamicamente sempre que a exibição do aplicativo for criada.