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::Create
erstellt 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 CWindowImpl
stellt 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 CWindowImplRoot
von , 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
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.