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