Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
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