Freigeben über


CWindowImpl-Klasse

Stellt Methoden für das Erstellen eines Fensters oder von Unterklassen eines Fensters bereit

Wichtig

Diese Klasse und ihre Member können nicht in Anwendungen verwendet werden, die in der Windows-Runtime ausgeführt werden.

Syntax

template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>

Parameter

T
Die neue Klasse, die von CWindowImpl abgeleitet ist.

TBase
Die Basisklasse der Klasse. Standardmäßig ist die Basisklasse CWindow.

TWinTraits
Eine Eigenschaftenklasse , die Formatvorlagen für Ihr Fenster definiert. Der Standardwert ist CControlWinTraits.

Member

Öffentliche Methoden

Name Beschreibung
CWindowImpl::Create Erstellt ein Fenster.

CWindowImplBaseT-Methoden

Name Beschreibung
DefWindowProc Stellt die Standardverarbeitung von Nachrichten bereit.
GetCurrentMessage Die gibt die aktuelle Nachricht zurück.
GetWindowProc Gibt die aktuelle Fensterprozedur zurück.
OnFinalMessage Wird aufgerufen, nachdem die letzte Nachricht empfangen wurde (in der Regel WM_NCDESTROY).
UnterklasseWindow Erstellt Unterklassen eines Fensters.
UnsubclassWindow Stellt ein zuvor untergeordnetes Fenster wieder her.

Statische Methoden

Name Beschreibung
GetWndClassInfo Gibt eine statische Instanz von CWndClassInfo zurück, die die Fensterklasseninformationen verwaltet.
WindowProc Verarbeitet die Nachrichten, die an das Fenster gesendet werden.

Datenelemente

Name Beschreibung
m_pfnSuperWindowProc Zeigt auf die ursprüngliche Fensterprozedur der Fensterklasse.

Hinweise

Sie können CWindowImpl ein Fenster oder eine Unterklasse eines vorhandenen Fensters erstellen. die CWindowImpl Fensterprozedur verwendet eine Nachrichtenzuordnung, um Nachrichten an die entsprechenden Handler zu leiten.

CWindowImpl::Createerstellt ein Fenster basierend auf den Von CWndClassInfo verwalteten Fensterklasseninformationen. CWindowImpl enthält das DECLARE_WND_CLASS Makro, was bedeutet CWndClassInfo , dass eine neue Fensterklasse registriert wird. Wenn Sie eine vorhandene Fensterklasse überlagern möchten, leiten Sie Ihre Klasse von der klasse ab CWindowImpl und fügen Sie das DECLARE_WND_SUPERCLASS Makro ein. In diesem Fall wird mit CWndClassInfo eine Fensterklasse registriert, die auf einer vorhandenen Klasse basiert, aber CWindowImpl::WindowProc verwendet. Zum Beispiel:

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

Hinweis

Da CWndClassInfo nur die Informationen für eine Fensterklasse verwaltet, basiert jedes Fenster, das durch eine Instanz von CWindowImpl erstellt wird, auf der gleichen Fensterklasse.

CWindowImpl unterstützt auch die Erstellung von Unterklassen von Fenstern. Die SubclassWindow-Methode fügt ein vorhandenes Fenster an das CWindowImpl-Objekt an und ändert die Fensterprozedur in CWindowImpl::WindowProc. Jede Instanz von CWindowImpl kann ein anderes Fenster unterordnen.

Hinweis

Rufen Sie für ein bestimmtes CWindowImpl Objekt entweder Create oder SubclassWindow. Rufen Sie nicht beide Methoden für dasselbe Objekt auf.

Darüber hinaus CWindowImplstellt ATL CContainedWindow bereit, um ein Fenster zu erstellen, das in einem anderen Objekt enthalten ist.

Der Basisklassen-Destruktor (~ CWindowImplRoot) stellt sicher, dass das Fenster nicht mehr vorhanden ist, bevor das Objekt zerstört wird.

CWindowImpl abgeleitet von CWindowImplBaseT, die CWindowImplRootvon , abgeleitet von , die von TBase und CMessageMap abgeleitet.

Weitere Informationen zu Siehe
Erstellen von Steuerelementen ATL-Tutorial
Verwenden von Fenstern in ATL ATL-Fensterklassen
ATL-Projekt-Assistent Erstellen eines ATL-Projekts

Vererbungshierarchie

CMessageMap

TBase

CWindowImplRoot

CWindowImplBaseT

CWindowImpl

Anforderungen

Kopfzeile: atlwin.h

CWindowImpl::Create

Erstellt ein Fenster basierend auf einer neuen Fensterklasse.

HWND Create(
    HWND hWndParent,
    _U_RECT rect = NULL,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

Parameter

hWndParent
[in] Das Handle für das übergeordnete Fenster oder das Besitzerfenster.

rect
[in] Eine RECT-Struktur , die die Position des Fensters angibt. Dies RECT kann per Zeiger oder Verweis übergeben werden.

szWindowName
[in] Gibt den Namen des Fensters an. Der Standardwert ist NULL.

dwStyle
[in] Die Formatvorlage des Fensters. Dieser Wert wird mit der Formatvorlage kombiniert, die von der Eigenschaftsklasse für das Fenster bereitgestellt wird. Der Standardwert gibt der Eigenschaftsklasse die vollständige Kontrolle über die Formatvorlage. Eine Liste der möglichen Werte finden Sie unter CreateWindow im Windows SDK.

dwExStyle
[in] Die Formatvorlage des erweiterten Fensters. Dieser Wert wird mit der Formatvorlage kombiniert, die von der Eigenschaftsklasse für das Fenster bereitgestellt wird. Der Standardwert gibt der Eigenschaftsklasse die vollständige Kontrolle über die Formatvorlage. Eine Liste der möglichen Werte finden Sie unter CreateWindowEx im Windows SDK.

MenuOrID
[in] Bei einem untergeordneten Fenster wird der Fensterbezeichner angezeigt. Für ein Fenster auf oberster Ebene wird ein Menühandle für das Fenster verwendet. Der Standardwert ist 0U.

lpCreateParam
[in] Ein Zeiger auf Fenstererstellungsdaten. Eine vollständige Beschreibung finden Sie in der Beschreibung für den endgültigen Parameter zu CreateWindowEx.

Rückgabewert

Bei erfolgreicher Ausführung wird das Handle für das neu erstellte Fenster ausgeführt. Andernfalls wird NULL verwendet.

Hinweise

Create registriert zuerst die Fensterklasse, wenn sie noch nicht registriert wurde. Das neu erstellte Fenster wird automatisch an das CWindowImpl Objekt angefügt.

Hinweis

Rufen Sie nicht aufCreate, wenn Sie "SubclassWindow" bereits aufgerufen haben.

Um eine Fensterklasse zu verwenden, die auf einer vorhandenen Fensterklasse basiert, leiten Sie Ihre Klasse ab CWindowImpl und schließen sie das DECLARE_WND_SUPERCLASS Makro ein. Die Fensterprozedur der vorhandenen Fensterklasse wird in m_pfnSuperWindowProc gespeichert. Weitere Informationen finden Sie in der Übersicht über CWindowImpl .

Hinweis

Wenn 0 als Wert für den MenuOrID-Parameter verwendet wird, muss er als 0U (Standardwert) angegeben werden, um einen Compilerfehler zu vermeiden.

CWindowImpl::D efWindowProc

Wird von WindowProc aufgerufen, um Nachrichten zu verarbeiten, die nicht von der Nachrichtenzuordnung verarbeitet werden.

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

LRESULT DefWindowProc();

Parameter

uMsg
[in] Die an das Fenster gesendete Nachricht.

wParam
[in] Zusätzliche nachrichtenspezifische Informationen.

lParam
[in] Zusätzliche nachrichtenspezifische Informationen.

Rückgabewert

Das Ergebnis der Nachrichtenverarbeitung.

Hinweise

Ruft standardmäßig die CallWindowProc Win32-Funktion auf, DefWindowProc um die Nachrichteninformationen an die in m_pfnSuperWindowProc angegebene Fensterprozedur zu senden.

Die Funktion ohne Parameter ruft automatisch die erforderlichen Parameter aus der aktuellen Nachricht ab.

CWindowImpl::GetCurrentMessage

Gibt die aktuelle Nachricht zurück, die in der MSG Struktur verpackt ist.

const MSG* GetCurrentMessage();

Rückgabewert

Die aktuelle Nachricht.

CWindowImpl::GetWindowProc

Gibt die aktuelle Fensterprozedur zurück WindowProc.

virtual WNDPROC GetWindowProc();

Rückgabewert

Die aktuelle Fensterprozedur.

Hinweise

Überschreiben Sie diese Methode, um die Fensterprozedur durch ihre eigene zu ersetzen.

CWindowImpl::GetWndClassInfo

Wird von Create aufgerufen, um auf die Fensterklasseninformationen zuzugreifen.

static CWndClassInfo& GetWndClassInfo();

Rückgabewert

Eine statische Instanz von CWndClassInfo.

Hinweise

Ruft diese Methode standardmäßig CWindowImpl über das DECLARE_WND_CLASS-Makro ab, das eine neue Fensterklasse angibt.

Um eine vorhandene Fensterklasse zu überklassen, leiten Sie Ihre Klasse von der klasse ab CWindowImpl und schließen sie das DECLARE_WND_SUPERCLASS Makro ein, um außer Kraft zu setzen GetWndClassInfo. Weitere Informationen finden Sie in der Übersicht über CWindowImpl .

Neben der Verwendung der DECLARE_WND_CLASS und DECLARE_WND_SUPERCLASS Makros können Sie mit Ihrer eigenen Implementierung außer Kraft setzen GetWndClassInfo .

CWindowImpl::m_pfnSuperWindowProc

Zeigt je nach Fenster auf eine der folgenden Fensterprozeduren.

WNDPROC m_pfnSuperWindowProc;

Hinweise

Fenstertyp Fensterprozedur
Ein Fenster basierend auf einer neuen Fensterklasse, die über das DECLARE_WND_CLASS-Makro angegeben wird. Die DefWindowProc Win32-Funktion.
Ein Fenster basierend auf einer Fensterklasse, die eine vorhandene Klasse ändert, die über das DECLARE_WND_SUPERCLASS-Makro angegeben wird. Die Fensterprozedur der vorhandenen Fensterklasse.
Ein Unterklassenfenster. Die ursprüngliche Fensterprozedur des Unterklassenfensters.

CWindowImpl::D efWindowProc sendet Nachrichteninformationen an die fensterprozedur gespeichert in m_pfnSuperWindowProc.

CWindowImpl::OnFinalMessage

Wird aufgerufen, nachdem die letzte Nachricht empfangen wurde (in der Regel WM_NCDESTROY).

virtual void OnFinalMessage(HWND hWnd);

Parameter

hWnd
[in] Ein Griff zum zerstörten Fenster.

Hinweise

Die Standardimplementierung von OnFinalMessage "Erledigt" führt nichts aus, aber Sie können diese Funktion außer Kraft setzen, um die Bereinigung zu behandeln, bevor Sie ein Fenster zerstören. Wenn Sie Ihr Objekt bei der Fenstervernichtung automatisch löschen möchten, können Sie diese Funktion aufrufen delete this; .

CWindowImpl::SubclassWindow

Unterklassen des durch hWnd identifizierten Fensters und fügt es an das CWindowImpl Objekt an.

BOOL SubclassWindow(HWND hWnd);

Parameter

hWnd
[in] Das Handle für das Fenster, das unterklassigt wird.

Rückgabewert

TRUE, wenn das Fenster erfolgreich unterklassigt ist; andernfalls FALSE.

Hinweise

Das Unterklassenfenster verwendet jetzt CWindowImpl::WindowProc. Die ursprüngliche Fensterprozedur wird in m_pfnSuperWindowProc gespeichert.

Hinweis

Rufen Sie nicht aufSubclassWindow, wenn Sie "Create" bereits aufgerufen haben.

CWindowImpl::UnsubclassWindow

Trennt das Unterklassenfenster vom CWindowImpl Objekt und stellt die ursprüngliche Fensterprozedur wieder her, die in m_pfnSuperWindowProc gespeichert ist.

HWND UnsubclassWindow();

Rückgabewert

Das Handle für das Fenster, das zuvor unterklassigt wurde.

CWindowImpl::WindowProc

Diese statische Funktion implementiert die Fensterprozedur.

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

Parameter

hWnd
[in] Der Ziehpunkt für das Fenster.

uMsg
[in] Die an das Fenster gesendete Nachricht.

wParam
[in] Zusätzliche nachrichtenspezifische Informationen.

lParam
[in] Zusätzliche nachrichtenspezifische Informationen.

Rückgabewert

Das Ergebnis der Nachrichtenverarbeitung.

Hinweise

WindowProc verwendet die Standardnachrichtenzuordnung (deklariert mit BEGIN_MSG_MAP), um Nachrichten an die entsprechenden Handler zu leiten. Ruft bei Bedarf WindowProc DefWindowProc für die zusätzliche Nachrichtenverarbeitung auf. Wenn die endgültige Nachricht nicht behandelt wird, WindowProc gehen Sie wie folgt vor:

  • Führt eine Nichtklassifizierung durch, wenn das Fenster nicht klassifiziert wurde.

  • Löscht m_hWnd.

  • Ruft OnFinalMessage auf, bevor das Fenster zerstört wird.

Sie können außer Kraft setzen WindowProc , um einen anderen Mechanismus zum Behandeln von Nachrichten bereitzustellen.

Siehe auch

BEGIN_MSG_MAP
CComControl-Klasse
Klassenübersicht