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

  1. Insira CIRC.H em CMYVIEW.H logo antes da definição da classe CMyView:

    #include "circ.h"
    
  2. Adicione uma variável membro (do tipo CCirc) à seção protegida da definição de classe CMyView localizada em CMYVIEW.H:

    class CMyView : public CView
    {
    
    protected:
    CCirc m_myCtl;
    
    public:
    afx_msg void OnViewCircdlg();
    }
    ;
    
  3. Adicione um manipulador de mensagens WM_CREATE à classe CMyView.

  4. Na função de manipulador, CMyView::OnCreate, faça uma chamada para a função Create do controle usando o ponteiro 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;
    }
    
  5. Recompile o projeto. Um controle Circ será criado dinamicamente sempre que a exibição do aplicativo for criada.

Confira também

Contêineres de controle ActiveX