Contêineres de controle ActiveX: usando controles em um contêiner que não seja da caixa de diálogo
Em alguns aplicativos, como um aplicativo de SDI ou de documentos, você desejará inserir um controle em uma janela do aplicativo. A função de membro de Criar da classe de invólucro, inserida pelo Visual C++, é possível criar uma instância do controle dinamicamente, sem a necessidade de uma caixa de diálogo.
A função de membro de Criar tem os seguintes parâmetros:
lpszWindowName
Um ponteiro para o texto a ser exibido na propriedade de texto ou da legenda de controle (se houver).dwStyle
Estilos do windows. Para obter uma lista completa, consulte CWnd::CreateControl.rect
Especifica o tamanho e posição do controle.pParentWnd
Especifica a janela pai de controle, geralmente CDialog. Não deve ser nulo.nID
Especifica a ID de controle e pode ser usado pelo contêiner para se referir ao controle.
Um exemplo de como usar essa função para criar dinamicamente um controle ActiveX seria em uma exibição do formulário de um aplicativo de SDI. Depois você pode criar uma instância do controle do manipulador de WM_CREATE do aplicativo.
Para este exemplo, CMyView é a classe principal da exibição, CCirc é a classe de invólucro, e CIRC.H é o cabeçalho (. H) arquivo da classe de invólucro.
Implementar esse recurso é um processo de quatro etapas.
Para criar dinamicamente um controle ActiveX em uma janela que não seja caixa de diálogo
Inserir CIRC.H em CMYVIEW.H, imediatamente antes da definição de classe de CMyView :
#include "circ.h"
Adicionar uma variável de membro (do tipo CCirc) na seção protegida da definição de classe de CMyView localizada em CMYVIEW.H:
class CMyView : public CView { ... protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); };
Adicionar um manipulador de mensagens de WM_CREATE para classificar CMyView.
Na função de manipulador, CMyView::OnCreate, faz uma chamada à função de Create de controle usando o ponteiro de this 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; }
Crie o projeto. Um controle de Circ será criado dinamicamente sempre que a exibição de aplicativo é criada.