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 fornece métodos para criar uma janela ou colocá-la em subclasse.
Importante
Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.
Sintaxe
template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>
Parâmetros
T
Defina uma nova classe derivada de CWindowImpl.
TBase
A classe base da sua classe. A classe base padrão é CWindow.
TWinTraits
Uma classe de características que define estilos para a janela. O padrão é CControlWinTraits.
Membros
Métodos públicos
| Nome | Descrição |
|---|---|
| CWindowImpl::Create | Cria uma janela. |
Métodos CWindowImplBaseT
| Nome | Descrição |
|---|---|
| DefWindowProc | Fornece processamento de mensagem padrão. |
| GetCurrentMessage | Retorna a mensagem atual. |
| GetWindowProc | Retorna o procedimento da janela atual. |
| OnFinalMessage | Chamado após a última mensagem ser recebida, normalmente é WM_NCDESTROY. |
| SubclassWindow | Coloca uma janela em subclasse. |
| UnsubclassWindow | Restaura uma janela que foi colocada em subclasse. |
Métodos estáticos
| Nome | Descrição |
|---|---|
| GetWndClassInfo | Retorna uma instância estática do CWndClassInfo, que gerencia as informações da classe de janela. |
| WindowProc | Processa mensagens enviadas para a janela. |
Membros de dados
| Nome | Descrição |
|---|---|
| m_pfnSuperWindowProc | Aponta para o procedimento de janela original da classe de janela. |
Comentários
É possível usar CWindowImpl para criar uma nova janela ou uma subclasse de uma janela existente. O procedimento de janela CWindowImpl usa um mapa de mensagem no objeto contentor para direcionar mensagens para os manipuladores apropriados.
CWindowImpl::Create cria uma janela com base nas informações da classe de janela gerenciadas por CWndClassInfo. CWindowImpl contém a macro DECLARE_WND_CLASS, o que significa que CWndClassInfo registra uma nova classe de janela. Se você quiser transformar uma classe janela existente em superclasse, derive sua classe de CWindowImpl e inclua a macro DECLARE_WND_SUPERCLASS. Nesse caso, o método CWndClassInfo primeiro registra uma classe de janela baseada em uma classe existente, mas usa CWindowImpl::WindowProc. Por exemplo:
class ATL_NO_VTABLE CMyWindow :
OtherInheritedClasses
public CComControl<CMyWindow>
// CComControl derives from CWindowImpl
{
public:
// 1. The NULL parameter means ATL will generate a
// name for the superclass
// 2. The "EDIT" parameter means the superclass is
// based on the standard Windows Edit box
DECLARE_WND_SUPERCLASS(NULL, _T("EDIT"))
// Remainder of class declaration omitted
Observação
Como CWndClassInfo gerencia as informações de apenas uma classe de janela, cada janela criada por meio de uma instância de CWindowImpl é baseada na mesma classe de janela.
CWindowImpl também dá suporte à subclasse de janela. O método SubclassWindow anexa uma janela existente ao objeto CWindowImpl e altera o procedimento de janela para CWindowImpl::WindowProc. Cada instância de CWindowImpl pode colocar uma janela diferente em uma subclasse.
Observação
Para qualquer objeto CWindowImpl determinado, chame Create ou SubclassWindow. Não invoque ambos os métodos no mesmo objeto.
Além de CWindowImpl, a ATL fornece CContainedWindow para criar uma janela contida em outro objeto.
O destruidor da classe base (~ CWindowImplRoot) garante que a janela tenha sumido antes de o objeto ser destruído.
CWindowImpl deriva de CWindowImplBaseT, que deriva de CWindowImplRoot, que deriva de TBase e CMessageMap.
| 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 |
Hierarquia de herança
TBase
CWindowImplRoot
CWindowImplBaseT
CWindowImpl
Requisitos
Cabeçalho: atlwin.h
CWindowImpl::Create
Cria uma janela com base em uma nova classe de janela.
HWND Create(
HWND hWndParent,
_U_RECT rect = NULL,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Parâmetros
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. Esse valor é combinado com o estilo fornecido pela classe de características da janela. O valor padrão fornece à classe de características controle total sobre o estilo. Para obter uma lista de valores possíveis, consulte CreateWindow no SDK do Windows.
dwExStyle
[in] O estilo de janela estendida. Esse valor é combinado com o estilo fornecido pela classe de características da janela. O valor padrão fornece à classe de características controle total sobre o estilo. 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
Create primeiro registrará a classe de janela se ela ainda não tiver sido registrada. A janela recém-criada é anexada automaticamente ao objeto CWindowImpl.
Observação
Não chame Create se você já tiver chamado SubclassWindow.
Para usar uma classe de janela com base em uma classe janela existente, derive sua classe de CWindowImpl e inclua a macro DECLARE_WND_SUPERCLASS. O procedimento de janela da classe de janela existente é salvo em m_pfnSuperWindowProc. Para obter mais informações, confira a visão geral de CWindowImpl.
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.
CWindowImpl::DefWindowProc
Chamado por WindowProc para processar mensagens não identificadas pelo mapa de mensagens.
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
LRESULT DefWindowProc();
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.
A função sem parâmetros recupera automaticamente os parâmetros necessários da mensagem atual.
CWindowImpl::GetCurrentMessage
A mensagem atual, empacotada na estrutura MSG.
const MSG* GetCurrentMessage();
Valor de retorno
A mensagem atual.
CWindowImpl::GetWindowProc
Retorna WindowProc, o procedimento de janela atual.
virtual WNDPROC GetWindowProc();
Valor de retorno
O procedimento de janela atual.
Comentários
Substitua esse método para substituir o procedimento de janela pelo seu.
CWindowImpl::GetWndClassInfo
Chamado por Create para acessar as informações da classe de janela.
static CWndClassInfo& GetWndClassInfo();
Valor de retorno
Uma instância estática de CWndClassInfo.
Comentários
Por padrão, CWindowImpl obtém esse método por meio da macro DECLARE_WND_CLASS, que especifica uma nova classe de janela.
Para transformar uma classe janela existente em superclasse, derive sua classe de CWindowImpl e inclua a macro DECLARE_WND_SUPERCLASS para substituir GetWndClassInfo. Para obter mais informações, confira a visão geral de CWindowImpl.
Além de usar as macros DECLARE_WND_CLASS e DECLARE_WND_SUPERCLASS, você pode substituir GetWndClassInfo com uma implementação própria.
CWindowImpl::m_pfnSuperWindowProc
Dependendo da janela, aponta para um dos procedimentos de janela a seguir.
WNDPROC m_pfnSuperWindowProc;
Comentários
| Tipo de janela | Procedimento de janela |
|---|---|
| Uma janela baseada em uma nova classe de janela, especificada por meio da macro DECLARE_WND_CLASS. | A função Win32 DefWindowProc. |
| Uma janela baseada em uma classe de janela que modifica uma classe existente, especificada por meio da macro DECLARE_WND_SUPERCLASS. | O procedimento de janela da classe de janela existente. |
| Uma janela colocada em subclasse. | O procedimento de janela original da janela em subclasse. |
CWindowImpl::DefWindowProc envia informações de mensagem para o procedimento de janela salvo em m_pfnSuperWindowProc.
CWindowImpl::OnFinalMessage
Chamado após receber a última mensagem, normalmente WM_NCDESTROY.
virtual void OnFinalMessage(HWND hWnd);
Parâmetros
hWnd
[in] Um identificador para a janela que está sendo destruída.
Comentários
A implementação padrão de OnFinalMessage não faz nada, mas você pode substituir essa função para lidar com a limpeza antes de destruir uma janela. Observe que, se você quiser excluir automaticamente o objeto após a destruição da janela, poderá chamar delete this; nesta função.
CWindowImpl::SubclassWindow
Coloca em subclasse a janela identificada por hWnd e a anexa ao objeto CWindowImpl.
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 CWindowImpl::WindowProc. O procedimento de janela original é salvo em m_pfnSuperWindowProc.
Observação
Não chame SubclassWindow se você já tiver chamado Criar.
CWindowImpl::UnsubclassWindow
Desanexa a janela colocada em subclasse do objeto CWindowImpl e restaura o procedimento de janela original, salvo em m_pfnSuperWindowProc.
HWND UnsubclassWindow();
Valor de retorno
O identificador para a janela colocada em subclasse anteriormente.
CWindowImpl::WindowProc
Essa função estática implementa o procedimento da 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 usa o mapa de mensagem padrão declarado com BEGIN_MSG_MAP para direcionar mensagens para os manipuladores apropriados. Se necessário, WindowProc chama DefWindowProc para processamento adicional de mensagens. Se a mensagem final não for manipulada, WindowProc faz o seguinte:
Executa a remoção da subclasse se a janela foi retirada da subclasse.
Limpa o
m_hWnd.Chama OnFinalMessage antes que a janela seja destruída.
Você pode substituir WindowProc para fornecer um mecanismo diferente para lidar com mensagens.