Compartilhar via


Classe CContainedWindowT

Essa classe implementa uma janela contida em outro objeto.

Importante

Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.

Sintaxe

template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase

Parâmetros

TBase
A classe base da sua nova classe. A classe base padrão é CWindow.

TWinTraits
Uma classe de características que define estilos para a janela. O padrão é CControlWinTraits.

Observação

CContainedWindow é uma especialização de CContainedWindowT. Se você quiser alterar a classe base ou características, use CContainedWindowT diretamente.

Membros

Construtores públicos

Nome Descrição
CContainedWindowT::CContainedWindowT Construtor. Inicializa membros de dados para especificar qual mapa de mensagens processará as mensagens da janela contida.

Métodos públicos

Nome Descrição
CContainedWindowT::Create Cria uma janela.
CContainedWindowT::DefWindowProc Fornece processamento de mensagem padrão.
CContainedWindowT::GetCurrentMessage Retorna a mensagem atual.
CContainedWindowT::RegisterWndSuperclass Registra a classe de janela da janela contida.
CContainedWindowT::SubclassWindow Coloca uma janela em subclasse.
CContainedWindowT::SwitchMessageMap Altera qual mapa de mensagem é usado para processar as mensagens da janela contida.
CContainedWindowT::UnsubclassWindow Restaura uma janela que foi colocada em subclasse.
CContainedWindowT::WindowProc (Estático) Processa mensagens enviadas para a janela contida.

Membros de Dados Públicos

Nome Descrição
CContainedWindowT::m_dwMsgMapID Identifica qual mapa de mensagem processará as mensagens da janela contida.
CContainedWindowT::m_lpszClassName Especifica o nome de uma classe de janela existente na qual uma nova classe de janela será baseada.
CContainedWindowT::m_pfnSuperWindowProc Aponta para o procedimento de janela original da classe de janela.
CContainedWindowT::m_pObject Aponta para o objeto contentor.

Comentários

CContainedWindowT implementa uma janela contida em outro objeto. O procedimento de janela de CContainedWindowT usa um mapa de mensagem no objeto contentor para direcionar mensagens para os manipuladores apropriados. Ao construir um objeto CContainedWindowT, você especifica qual mapa de mensagens deve ser usado.

CContainedWindowT permite que você crie uma nova janela colocando superclasse em um classe de janela existente. O método Create primeiro registra uma classe de janela baseada em uma classe existente, mas usa CContainedWindowT::WindowProc. Create então cria uma janela com base nessa nova classe de janela. Cada instância de CContainedWindowT pode colocar superclasse em uma classe de janela diferente.

CContainedWindowT também dá suporte à subclasse de janela. O método SubclassWindow anexa uma janela existente ao objeto CContainedWindowT e altera o procedimento de janela para CContainedWindowT::WindowProc. Cada instância de CContainedWindowT pode colocar uma janela diferente em uma subclasse.

Observação

Para qualquer objeto CContainedWindowT determinado, chame Create ou SubclassWindow. Você não deve invocar ambos os métodos no mesmo objeto.

Quando você usa a opção Adicionar controle baseado em no Assistente de Projeto da ATL, o assistente adicionará automaticamente um membro de dados CContainedWindowT à classe que implementa o controle. O exemplo a seguir mostra como a janela contida é declarada:

public:
   // Declare a contained window data member
   CContainedWindow m_ctlEdit;

   // Initialize the contained window:
   // 1. Pass "Edit" to specify that the contained 
   //    window should be based on the standard 
   //    Windows Edit box
   // 2. Pass 'this' pointer to specify that CAtlEdit 
   //    contains the message map to be used for the 
   //    contained window's message processing
   // 3. Pass the identifier of the message map. '1'
   //    identifies the alternate message map declared
   //    with ALT_MSG_MAP(1)
   CAtlEdit()
      : m_ctlEdit(_T("Edit"), this, 1)
   {
      m_bWindowOnly = TRUE;
   }

 

// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
   CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()

 

// Define OnCreate handler
// When the containing window receives a WM_CREATE
// message, create the contained window by calling
// CContainedWindow::Create
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
   BOOL& /*bHandled*/)
{
   RECT rc;
   GetWindowRect(&rc);
   rc.right -= rc.left;
   rc.bottom -= rc.top;
   rc.top = rc.left = 0;
   m_ctlEdit.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE | 
      ES_MULTILINE | ES_AUTOVSCROLL);
   return 0;
}
Para obter mais informações sobre Consulte
Criar controles Tutorial da ATL
Usar janelas na ATL Classes de janela da ATL
Assistente de Projeto da ATL Criando um projeto ATL
Windows Windows e tópicos subsequentes no SDK do Windows

Hierarquia de herança

TBase

CContainedWindowT

Requisitos

Cabeçalho: atlwin.h

CContainedWindowT::CContainedWindowT

O construtor inicializa os membros de dados.

CContainedWindowT(
    LPTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

CContainedWindowT(
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0)
    CContainedWindowT();

Parâmetros

lpszClassName
[in] O nome de uma classe de janela existente na qual a janela contida será baseada.

pObject
[in] Um ponteiro para o objeto contentor que declara o mapa de mensagem. A classe desse objeto deve derivar de CMessageMap.

dwMsgMapID
[in] Identifica o mapa de mensagem que processará as mensagens da janela contida. O valor padrão, 0, especifica o mapa de mensagens padrão declarado com BEGIN_MSG_MAP. Para usar um mapa de mensagem alternativo declarado com ALT_MSG_MAP(msgMapID), passe msgMapID.

Comentários

Se você quiser criar uma nova janela por meio de Criar, deverá passar o nome de uma classe de janela existente para o parâmetro lpszClassName. Para ver um exemplo, consulte a visão geral de CContainedWindow.

Há três construtores:

  • O construtor com três argumentos é o que normalmente é chamado.

  • O construtor com dois argumentos usa o nome de classe de TBase::GetWndClassName.

  • O construtor sem argumentos será usado se você quiser fornecer os argumentos mais tarde. Você deve fornecer o nome de classe de janela, o objeto de mapa de mensagem e a ID do mapa de mensagem quando for chamar Create posteriormente.

Se você colocar em subclasse uma janela existente por meio de SubclassWindow, o valor lpszClassName não será usado. Portanto, você pode passar NULL para esse parâmetro.

CContainedWindowT::Create

Chama RegisterWndSuperclass para registrar uma classe de janela baseada em uma classe existente, mas que usa CContainedWindowT::WindowProc.

HWND Create(
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

HWND Create(
    CMessageMap* pObject,
    DWORD dwMsgMapID,
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

HWND Create(
    LPCTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID,
    HWND hWndParent,
    _U_RECT rect,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

Parâmetros

lpszClassName
[in] O nome de uma classe de janela existente na qual a janela contida será baseada.

pObject
[in] Um ponteiro para o objeto contentor que declara o mapa de mensagem. A classe desse objeto deve derivar de CMessageMap.

dwMsgMapID
[in] Identifica o mapa de mensagem que processará as mensagens da janela contida. O valor padrão, 0, especifica o mapa de mensagens padrão declarado com BEGIN_MSG_MAP. Para usar um mapa de mensagem alternativo declarado com ALT_MSG_MAP(msgMapID), passe msgMapID.

hWndParent
[in] O identificador para a janela proprietária ou pai.

rect
[in] Uma estrutura RECT que especifica a posição da janela. O RECT pode ser passado por ponteiro ou por referência.

szWindowName
[in] Especifica o nome da janela. O valor padrão é NULL.

dwStyle
[in] O estilo da janela. O valor padrão é WS_CHILD | WS_VISIBLE. Para obter uma lista de valores possíveis, consulte CreateWindow no SDK do Windows.

dwExStyle
[in] O estilo de janela estendida. O valor padrão é 0, significando que não há estilo estendido. Para obter uma lista de valores possíveis, confira CreateWindowEx no SDK do Windows.

MenuOrID
[in] Para uma janela filho, o identificador da janela. Para uma janela de nível superior, um identificador de menu para a janela. O valor padrão é 0U.

lpCreateParam
[in] Um ponteiro para dados de criação de janela. Para ver uma descrição completa, confira a descrição do parâmetro final para CreateWindowEx.

Valor de retorno

Se bem-sucedido, o identificador para a janela recém-criada; caso contrário, NULL.

Comentários

O nome da classe de janela existente é salvo em m_lpszClassName. Create então cria uma janela com base nessa nova classe. A janela recém-criada é anexada automaticamente ao objeto CContainedWindowT.

Observação

Não chame Create se você já tiver chamado SubclassWindow.

Observação

Se 0 for usado como o valor do parâmetro MenuOrID, ele deverá ser especificado como 0U (o valor padrão) para evitar um erro do compilador.

CContainedWindowT::DefWindowProc

Chamado por WindowProc para processar mensagens não identificadas pelo mapa de mensagens.

LRESULT DefWindowProc()
LRESULT DefWindowProc(
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

Parâmetros

uMsg
[in] A mensagem enviada para a janela.

wParam
[in] Informações adicionais específicas de mensagem.

lParam
[in] Informações adicionais específicas de mensagem.

Valor de retorno

O resultado do processamento da mensagem.

Comentários

Por padrão, DefWindowProc chama a função Win32 CallWindowProc para enviar as informações da mensagem para o procedimento de janela especificado em m_pfnSuperWindowProc.

CContainedWindowT::GetCurrentMessage

Retorna a mensagem atual (m_pCurrentMsg).

const _ATL_MSG* GetCurrentMessage();

Valor de retorno

A mensagem atual, empacotada na estrutura MSG.

CContainedWindowT::m_dwMsgMapID

Retém o identificador do mapa de mensagem que está sendo usado atualmente para a janela contida.

DWORD m_dwMsgMapID;

Comentários

Este mapa de mensagem deve ser declarado no objeto contentor.

O mapa de mensagens padrão, declarado com BEGIN_MSG_MAP, sempre é identificado por zero. Um mapa de mensagem alternativo, declarado com ALT_MSG_MAP(msgMapID), é identificado por msgMapID.

m_dwMsgMapID é inicializado primeiro pelo construtor e pode ser alterado chamando SwitchMessageMap. Para ver um exemplo, consulte a visão geral de CContainedWindowT.

CContainedWindowT::m_lpszClassName

Especifica o nome de uma classe de janela existente.

LPTSTR m_lpszClassName;

Comentários

Quando você cria uma janela, Criar registra uma nova classe de janela baseada nessa classe existente, mas usa CContainedWindowT::WindowProc.

m_lpszClassName é inicializado pelo construtor. Para ver um exemplo, consulte a visão geral de CContainedWindowT.

CContainedWindowT::m_pfnSuperWindowProc

Se a janela contida for com subclasse, m_pfnSuperWindowProc aponta para o procedimento de janela original da classe de janela.

WNDPROC m_pfnSuperWindowProc;

Comentários

Se a janela contida tiver superclasse, o que significa que ela se baseia em uma classe de janela que modifica uma classe existente, m_pfnSuperWindowProc aponta para o procedimento de janela da classe de janela existente.

O método DefWindowProc envia informações de mensagem para o procedimento de janela salvo em m_pfnSuperWindowProc.

CContainedWindowT::m_pObject

Aponta para o objeto que contém o objeto CContainedWindowT.

CMessageMap* m_pObject;

Comentários

Esse contêiner, cuja classe deve derivar do CMessageMap, declara o mapa de mensagem usado pela janela contida.

m_pObject é inicializado pelo construtor. Para ver um exemplo, consulte a visão geral de CContainedWindowT.

CContainedWindowT::RegisterWndSuperclass

Chamado por Criar para registrar a classe de janela da janela contida.

ATOM RegisterWndSuperClass();

Valor de retorno

Se tiver êxito, um átomo que identifica exclusivamente a classe de janela que está sendo registrada; caso contrário, zero.

Comentários

Essa classe de janela é baseada em uma classe existente, mas usa CContainedWindowT::WindowProc. O nome da classe de janela existente e o procedimento de janela são salvos em m_lpszClassName e m_pfnSuperWindowProc, respectivamente.

CContainedWindowT::SubclassWindow

Coloca em subclasse a janela identificada por hWnd e a anexa ao objeto CContainedWindowT.

BOOL SubclassWindow(HWND hWnd);

Parâmetros

hWnd
[in] O identificador da janela sendo colocada em subclasse.

Valor de retorno

TRUE se a janela for colocada em subclasse com êxito; caso contrário, FALSE.

Comentários

A janela colocada em subclasse agora usa CContainedWindowT::WindowProc. O procedimento de janela original é salvo em m_pfnSuperWindowProc.

Observação

Não chame SubclassWindow se você já tiver chamado Criar.

CContainedWindowT::SwitchMessageMap

Altera qual mapa de mensagem será usado para processar as mensagens da janela contida.

void SwitchMessageMap(DWORD dwMsgMapID);

Parâmetros

dwMsgMapID
[in] O identificador do mapa de mensagem. Para usar o mapa de mensagem padrão declarado com BEGIN_MSG_MAP, passe 0. Para usar um mapa de mensagem alternativo declarado com ALT_MSG_MAP(msgMapID), passe msgMapID.

Comentários

O mapa de mensagem deve ser definido no objeto contentor.

Você especifica incialmente o identificador de mapa de mensagem no construtor.

CContainedWindowT::UnsubclassWindow

Desanexa a janela colocada em subclasse do objeto CContainedWindowT e restaura o procedimento de janela original, salvo em m_pfnSuperWindowProc.

HWND UnsubclassWindow(BOOL bForce = FALSE);

Parâmetros

bForce
[in] Defina como TRUE para forçar o procedimento de janela original a ser restaurado mesmo que o procedimento de janela para esse objeto CContainedWindowT não esteja ativo no momento. Se bForce for definido como FALSE e o procedimento de janela desse CContainedWindowT objeto não estiver ativo no momento, o procedimento de janela original não será restaurado.

Valor de retorno

O identificador para a janela colocada em subclasse anteriormente. Se bForce estiver definido como FALSE e o procedimento de janela desse objeto CContainedWindowT não estiver ativo no momento, retornará NULL.

Comentários

Use esse método somente se você quiser restaurar o procedimento de janela original antes que a janela seja destruída. Caso contrário, WindowProc fará isso automaticamente quando a janela for destruída.

CContainedWindowT::WindowProc

Esse método estático implementa o procedimento de janela.

static LRESULT CALLBACK WindowProc(
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

Parâmetros

hWnd
[in] O identificador para a janela.

uMsg
[in] A mensagem enviada para a janela.

wParam
[in] Informações adicionais específicas de mensagem.

lParam
[in] Informações adicionais específicas de mensagem.

Valor de retorno

O resultado do processamento da mensagem.

Comentários

WindowProc direciona mensagens para o mapa de mensagem identificado por m_dwMsgMapID. Se necessário, WindowProc chama DefWindowProc para processamento adicional de mensagens.

Confira também

Classe CWindow
Classe CWindowImpl
Classe CMessageMap
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Visão geral da aula