Partilhar via


Classe CWindowImpl

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Fornece métodos para criar ou subclassificar uma janela.

Importante

Esta classe e os seus membros não podem ser usados em aplicações que sejam executadas 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
A sua nova classe, derivada de CWindowImpl.

TBase
A classe base da tua turma. Por defeito, a classe base é CWindow.

TWinTraits
Uma classe de traços que define estilos para a tua janela. A predefinição é CControlWinTraits.

Membros

Métodos Públicos

Nome Description
CWindowImpl::Create Cria uma janela.

Métodos CWindowImplBaseT

Nome Description
DefWindowProc Fornece processamento de mensagens por defeito.
GetCurrentMessage Devolve a mensagem atual.
GetWindowProc Devolve o procedimento da janela atual.
OnFinalMessage É chamada após a última mensagem ser recebida (normalmente WM_NCDESTROY).
SubclassWindow Subclasse uma janela.
UnsubclassWindow Restaura uma janela anteriormente subclassificada.

Métodos estáticos

Nome Description
GetWndClassInfo Devolve uma instância estática de CWndClassInfo, que gere a informação da classe janela.
WindowProc Processa mensagens enviadas para a janela.

Membros de Dados

Nome Description
m_pfnSuperWindowProc Aponta para o procedimento original de janela da classe janela.

Observações

Podes usar CWindowImpl para criar uma janela ou subclassar uma janela existente. O CWindowImpl procedimento janela utiliza um mapa de mensagens para direcionar mensagens aos manipuladores apropriados.

CWindowImpl::Create cria uma janela baseada na informação da classe da janela que é gerida pelo CWndClassInfo. CWindowImpl contém a macro DECLARE_WND_CLASS , o que significa CWndClassInfo que regista uma nova classe janela. Se quiseres superclassar uma classe janela existente, deriva a tua classe e CWindowImpl inclui a macro DECLARE_WND_SUPERCLASS . Neste caso, CWndClassInfo regista uma classe janela baseada numa classe existente mas que 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 gere a informação de apenas uma classe de janela, cada janela criada através de uma instância de CWindowImpl baseia-se na mesma classe de janela.

CWindowImpl Também suporta subclasse de janelas. O SubclassWindow método anexa uma janela existente ao CWindowImpl objeto e altera o procedimento da janela para CWindowImpl::WindowProc. Cada instância de CWindowImpl pode subclassificar uma janela diferente.

Observação

Para qualquer objeto dado CWindowImpl , chame-se ou Create ou SubclassWindow. Não invoques ambos os métodos no mesmo objeto.

Além de CWindowImpl, o ATL fornece o CContainedWindow para criar uma janela contida noutro objeto.

O destruidor da classe base (~ CWindowImplRoot) garante que a janela desaparece antes de o objeto ser destruído.

CWindowImpl deriva de CWindowImplBaseT, que deriva de CWindowImplRoot, que deriva de TBase e CMessageMap.

Para mais informações sobre Veja
Criação de controlos ATL Tutorial
Utilização de janelas em ATL Classes de Janelas ATL
Feiticeiro do Projeto ATL Criando um projeto ATL

Hierarquia de herança

CMessageMap

TBase

CWindowImplRoot

CWindowImplBaseT

CWindowImpl

Requerimentos

Cabeçalho: atlwin.h

CWindowImpl::Create

Cria uma janela baseada numa 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
[dentro] A maçaneta da janela dos pais ou proprietários.

retângulo
[dentro] Uma estrutura RECT que especifica a posição da janela. Podem RECT ser passados por ponteiro ou por referência.

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

dwStyle
[dentro] O estilo da janela. Este valor é combinado com o estilo fornecido pela classe de traços para a janela. O valor padrão dá à classe de traços controlo total sobre o estilo. Para uma lista de valores possíveis, veja CreateWindow no SDK do Windows.

dwExStyle
[dentro] O estilo janela estendida. Este valor é combinado com o estilo fornecido pela classe de traços para a janela. O valor padrão dá à classe de traços controlo total sobre o estilo. Para uma lista de valores possíveis, veja CreateWindowEx no SDK do Windows.

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

lpCreateParam
[dentro] Um ponteiro para dados de criação de janelas. Para uma descrição completa, consulte a descrição do parâmetro final do CreateWindowEx.

Valor de retorno

Se for bem-sucedido, o handle para a janela recém-criada. Caso contrário, NULL.

Observações

Create primeiro regista a classe window se ainda não tiver sido registada. A janela recém-criada é automaticamente anexada ao CWindowImpl objeto.

Observação

Não ligue Create se já ligou para o SubclassWindow.

Para usar uma classe de janela baseada numa classe de janela existente, derive a sua classe a partir de CWindowImpl e inclua a macro DECLARE_WND_SUPERCLASS . O procedimento de janela da classe window existente é guardado em m_pfnSuperWindowProc. Para mais informações, consulte a visão geral do CWindowImpl .

Observação

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

CWindowImpl::D efWindowProc

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

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

LRESULT DefWindowProc();

Parâmetros

uMsg
[dentro] A mensagem enviada para a janela.

wParam
[dentro] Informação adicional específica da mensagem.

lParam
[dentro] Informação adicional específica da mensagem.

Valor de retorno

O resultado do processamento de mensagens.

Observações

Por defeito, DefWindowProc chama a função Win32 CallWindowPr para enviar a informação da mensagem para o procedimento da janela especificado em m_pfnSuperWindowProc.

A função sem parâmetros recupera automaticamente os parâmetros necessários da mensagem atual.

CWindowImpl::GetCurrentMessage

Devolve a mensagem atual, empacotada na MSG estrutura.

const MSG* GetCurrentMessage();

Valor de retorno

A mensagem atual.

CWindowImpl::GetWindowProc

Devolve WindowProc, o procedimento da janela atual.

virtual WNDPROC GetWindowProc();

Valor de retorno

O procedimento atual da janela.

Observações

Ignore este método para substituir o sistema da janela pelo seu próprio.

CWindowImpl::GetWndClassInfo

Chamado por Create para aceder à informação da classe janela.

static CWndClassInfo& GetWndClassInfo();

Valor de retorno

Uma instância estática de CWndClassInfo.

Observações

Por defeito, CWindowImpl obtém este método através da macro DECLARE_WND_CLASS , que especifica uma nova classe janela.

Para superclassar uma classe de janela existente, derive a sua classe a partir de CWindowImpl e inclua a macro DECLARE_WND_SUPERCLASS para sobrescrever GetWndClassInfo. Para mais informações, consulte a visão geral do CWindowImpl .

Além de usares os macros DECLARE_WND_CLASS e DECLARE_WND_SUPERCLASS, podes sobrescrever GetWndClassInfo com a tua própria implementação.

CWindowImpl::m_pfnSuperWindowProc

Dependendo da janela, aponta para um dos seguintes procedimentos de janela.

WNDPROC m_pfnSuperWindowProc;

Observações

Tipo de janela Procedimento da janela
Uma janela baseada numa nova classe de janela, especificada através da macro DECLARE_WND_CLASS . A função DefWindowProc Win32.
Uma janela baseada numa classe janela que modifica uma classe existente, especificada através do macro DECLARE_WND_SUPERCLASS . O procedimento de janelas da classe de janelas existente.
Uma janela de subclasse. O procedimento original da janela subclassificada.

CWindowImpl::D efWindowProc envia informação de mensagem para o procedimento janela guardado em m_pfnSuperWindowProc.

CWindowImpl::EmMensagemFinalT

Ligou depois de receber a última mensagem (normalmente WM_NCDESTROY).

virtual void OnFinalMessage(HWND hWnd);

Parâmetros

hWnd
[dentro] Uma maçaneta da janela a ser destruída.

Observações

A implementação padrão de OnFinalMessage não faz nada, mas podes sobrescrever esta função para gerir a limpeza antes de destruires uma janela. Se quiser eliminar automaticamente o seu objeto após a destruição da janela, pode chamar delete this; esta função.

CWindowImpl::SubclassWindow

Subclasse a janela identificada por hWnd e anexa-a ao CWindowImpl objeto.

BOOL SubclassWindow(HWND hWnd);

Parâmetros

hWnd
[dentro] A maçaneta da janela é subclassificada.

Valor de retorno

TRUE se a janela for subclassificada com sucesso; caso contrário, FALSO.

Observações

A janela subclasse agora usa CWindowImpl::WindowProc. O procedimento original da janela é guardado em m_pfnSuperWindowProc.

Observação

Não ligue SubclassWindow se já ligou para o Create.

CWindowImpl::UnsubclassWindow

Destaca a janela subclassificada do CWindowImpl objeto e restaura o procedimento original da janela, guardado em m_pfnSuperWindowProc.

HWND UnsubclassWindow();

Valor de retorno

A maçaneta da janela anteriormente subclassificada.

CWindowImpl::WindowProc

Esta função estática implementa o procedimento da janela.

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

Parâmetros

hWnd
[dentro] A maçaneta da janela.

uMsg
[dentro] A mensagem enviada para a janela.

wParam
[dentro] Informação adicional específica da mensagem.

lParam
[dentro] Informação adicional específica da mensagem.

Valor de retorno

O resultado do processamento de mensagens.

Observações

WindowProc usa o mapa de mensagens padrão (declarado com BEGIN_MSG_MAP) para direcionar mensagens aos manipuladores apropriados. Se necessário, WindowProc chama o DefWindowProc para processamento adicional de mensagens. Se a mensagem final não for tratada, WindowProc faz o seguinte:

  • Realiza a dessubclasse se a janela fosse sem subclasse.

  • Limpa m_hWnd.

  • Liga para OnFinalMessage antes de a janela ser destruída.

Pode sobrescrever WindowProc para fornecer um mecanismo diferente para lidar com as mensagens.

Consulte também

BEGIN_MSG_MAP
Classe CComControl
Visão geral da classe