Compartilhar via


Contêineres de controle ActiveX: usando controles em um contêiner que não é de diálogo

Em alguns aplicativos, como um aplicativo SDI ou MDI, você desejará inserir um controle em uma janela do aplicativo. A função Criar membro 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 Criar membro tem os seguintes parâmetros:

lpszWindowName
Um ponteiro para o texto a ser exibido na propriedade Text ou Caption 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 deve ser NULL.

Nid
Especifica a ID de controle e pode ser usada pelo contêiner para fazer referência ao controle.

Um exemplo de como usar essa função para criar dinamicamente um controle ActiveX seria em uma exibição de formulário de um aplicativo SDI. Em seguida, você pode criar uma instância do controle no WM_CREATE manipulador do aplicativo.

Para este exemplo, CMyView é a classe de exibição principal, CCirc é a classe wrapper e CIRC. H é o cabeçalho (. H) arquivo da classe wrapper.

Implementar esse recurso é um processo de quatro etapas.

Para criar dinamicamente um controle ActiveX em uma janela que não é de diálogo

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

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

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

  4. Na função de manipulador, CMyView::OnCreatefaça uma chamada para a função do Create controle usando o this ponteiro 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.

Consulte também

Contêineres de controle ActiveX