Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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
Createposteriormente.
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