CContainedWindowT-Klasse
Diese Klasse implementiert ein Fenster, das in einem anderen Objekt enthalten ist.
Wichtig
Diese Klasse und ihre Member können nicht in Anwendungen verwendet werden, die in der Windows-Runtime ausgeführt werden.
Syntax
template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase
Parameter
TBase
Die Basisklasse Ihrer neuen Klasse. Die Standardbasisklasse ist CWindow
.
TWinTraits
Eine Eigenschaftenklasse, die Formatvorlagen für Ihr Fenster definiert. Der Standardwert ist CControlWinTraits
.
Hinweis
CContainedWindow ist eine Spezialisierung von CContainedWindowT
. Wenn Sie die Basisklasse oder Eigenschaften ändern möchten, verwenden CContainedWindowT
Sie diese direkt.
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CContainedWindowT::CContainedWindowT | Konstruktor. Initialisiert Datenmmber, um anzugeben, welche Nachrichtenzuordnung die Nachrichten des enthaltenen Fensters verarbeitet. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CContainedWindowT::Create | Erstellt ein Fenster. |
CContainedWindowT::D efWindowProc | Stellt die Standardverarbeitung von Nachrichten bereit. |
CContainedWindowT::GetCurrentMessage | Die gibt die aktuelle Nachricht zurück. |
CContainedWindowT::RegisterWndSuperclass | Registriert die Fensterklasse des enthaltenen Fensters. |
CContainedWindowT::SubclassWindow | Erstellt Unterklassen eines Fensters. |
CContainedWindowT::SwitchMessageMap | Änderungen, mit denen die Nachrichtenzuordnung des enthaltenen Fensters verarbeitet wird. |
CContainedWindowt::UnsubclassWindow | Stellt ein zuvor untergeordnetes Fenster wieder her. |
CContainedWindowT::WindowProc | (Statisch) Verarbeitet Nachrichten, die an das enthaltene Fenster gesendet werden. |
Öffentliche Datenmember
Name | Beschreibung |
---|---|
CContainedWindowT::m_dwMsgMapID | Gibt an, welche Nachrichtenzuordnung die Nachrichten des enthaltenen Fensters verarbeitet. |
CContainedWindowT::m_lpszClassName | Gibt den Namen einer vorhandenen Fensterklasse an, auf der eine neue Fensterklasse basiert. |
CContainedWindowT::m_pfnSuperWindowProc | Zeigt auf die ursprüngliche Fensterprozedur der Fensterklasse. |
CContainedWindowT::m_pObject | Verweist auf das enthaltende Objekt. |
Hinweise
CContainedWindowT
implementiert ein Fenster, das in einem anderen Objekt enthalten ist. CContainedWindowT
Die Fensterprozedur verwendet eine Nachrichtenzuordnung im enthaltenden Objekt, um Nachrichten an die entsprechenden Handler zu leiten. Beim Erstellen eines CContainedWindowT
Objekts geben Sie an, welche Nachrichtenzuordnung verwendet werden soll.
CContainedWindowT
ermöglicht es Ihnen, ein neues Fenster zu erstellen, indem Sie eine vorhandene Fensterklasse überklassigen. Die Create
Methode registriert zunächst eine Fensterklasse, die auf einer vorhandenen Klasse basiert, verwendet jedoch CContainedWindowT::WindowProc
. Create
erstellt dann ein Fenster basierend auf dieser neuen Fensterklasse. Jede Instanz von CContainedWindowT
can superclass a different window class.
CContainedWindowT
unterstützt auch die Erstellung von Unterklassen von Fenstern. Die SubclassWindow
-Methode fügt ein vorhandenes Fenster an das CContainedWindowT
-Objekt an und ändert die Fensterprozedur in CContainedWindowT::WindowProc
. Jede Instanz von CContainedWindowT
kann ein anderes Fenster unterordnen.
Hinweis
Rufen Sie für ein bestimmtes CContainedWindowT
Objekt entweder Create
oder SubclassWindow
. Sie sollten nicht beide Methoden für dasselbe Objekt aufrufen.
Wenn Sie das Steuerelement basierend auf der Option im ATL-Projekt-Assistenten verwenden, fügt der Assistent automatisch ein CContainedWindowT
Datenelement zur Klasse hinzu, die das Steuerelement implementiert. Das folgende Beispiel zeigt, wie das enthaltene Fenster deklariert wird:
public:
// Declare a contained window data member
CContainedWindow m_ctlEdit;
// Initialize the contained window:
// 1. Pass "Edit" to specify that the contained
// window should be based on the standard
// Windows Edit box
// 2. Pass 'this' pointer to specify that CAtlEdit
// contains the message map to be used for the
// contained window's message processing
// 3. Pass the identifier of the message map. '1'
// identifies the alternate message map declared
// with ALT_MSG_MAP(1)
CAtlEdit()
: m_ctlEdit(_T("Edit"), this, 1)
{
m_bWindowOnly = TRUE;
}
// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
// Define OnCreate handler
// When the containing window receives a WM_CREATE
// message, create the contained window by calling
// CContainedWindow::Create
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
RECT rc;
GetWindowRect(&rc);
rc.right -= rc.left;
rc.bottom -= rc.top;
rc.top = rc.left = 0;
m_ctlEdit.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE |
ES_MULTILINE | ES_AUTOVSCROLL);
return 0;
}
Weitere Informationen zu | Siehe |
---|---|
Erstellen von Steuerelementen | ATL-Tutorial |
Verwenden von Fenstern in ATL | ATL-Fensterklassen |
ATL-Projekt-Assistent | Erstellen eines ATL-Projekts |
Windows | Windows und nachfolgende Themen im Windows SDK |
Vererbungshierarchie
TBase
CContainedWindowT
Anforderungen
Kopfzeile: atlwin.h
CContainedWindowT::CContainedWindowT
Der Konstruktor initialisiert Datenmmber.
CContainedWindowT(
LPTSTR lpszClassName,
CMessageMap* pObject,
DWORD dwMsgMapID = 0);
CContainedWindowT(
CMessageMap* pObject,
DWORD dwMsgMapID = 0)
CContainedWindowT();
Parameter
lpszClassName
[in] Der Name einer vorhandenen Fensterklasse, auf der das enthaltene Fenster basiert.
pObject
[in] Ein Zeiger auf das enthaltende Objekt, das die Nachrichtenzuordnung deklariert. Die Klasse dieses Objekts muss von CMessageMap abgeleitet werden.
dwMsgMapID
[in] Identifiziert die Nachrichtenzuordnung, die die Nachrichten des enthaltenen Fensters verarbeitet. Der Standardwert 0 gibt die standardnachrichtenzuordnung an, die mit BEGIN_MSG_MAP deklariert wurde. Um eine alternative Nachrichtenzuordnung zu verwenden, die mit ALT_MSG_MAP(msgMapID)deklariert ist, übergeben msgMapID
Sie .
Hinweise
Wenn Sie ein neues Fenster über Create erstellen möchten, müssen Sie den Namen einer vorhandenen Fensterklasse für den parameter lpszClassName übergeben. Ein Beispiel finden Sie in der Übersicht über CContainedWindow.
Es gibt drei Konstruktoren:
Der Konstruktor mit drei Argumenten ist in der Regel aufgerufen.
Der Konstruktor mit zwei Argumenten verwendet den Klassennamen aus
TBase::GetWndClassName
.Der Konstruktor ohne Argumente wird verwendet, wenn Sie die Argumente später angeben möchten. Sie müssen beim späteren Aufruf
Create
den Namen der Fensterklasse, das Nachrichtenzuordnungsobjekt und die Nachrichtenzuordnungs-ID angeben.
Wenn Sie ein vorhandenes Fenster über "SubclassWindow" untergliedern, wird der lpszClassName-Wert nicht verwendet. Daher können Sie NULL für diesen Parameter übergeben.
CContainedWindowT::Create
Ruft RegisterWndSuperclass auf, um eine Fensterklasse zu registrieren, die auf einer vorhandenen Klasse basiert, aber CContainedWindowT::WindowProc verwendet.
HWND Create(
HWND hWndParent,
_U_RECT rect,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
HWND Create(
CMessageMap* pObject,
DWORD dwMsgMapID,
HWND hWndParent,
_U_RECT rect,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
HWND Create(
LPCTSTR lpszClassName,
CMessageMap* pObject,
DWORD dwMsgMapID,
HWND hWndParent,
_U_RECT rect,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Parameter
lpszClassName
[in] Der Name einer vorhandenen Fensterklasse, auf der das enthaltene Fenster basiert.
pObject
[in] Ein Zeiger auf das enthaltende Objekt, das die Nachrichtenzuordnung deklariert. Die Klasse dieses Objekts muss von CMessageMap abgeleitet werden.
dwMsgMapID
[in] Identifiziert die Nachrichtenzuordnung, die die Nachrichten des enthaltenen Fensters verarbeitet. Der Standardwert 0 gibt die standardnachrichtenzuordnung an, die mit BEGIN_MSG_MAP deklariert wurde. Um eine alternative Nachrichtenzuordnung zu verwenden, die mit ALT_MSG_MAP(msgMapID)deklariert ist, übergeben msgMapID
Sie .
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. Der Standardwert ist WS_CHILD | WS_VISIBLE
. Eine Liste der möglichen Werte finden Sie unter CreateWindow im Windows SDK.
dwExStyle
[in] Die Formatvorlage des erweiterten Fensters. Der Standardwert ist 0, d. h. keine erweiterte 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 des Handles für das neu erstellte Fenster; andernfalls NULL.
Hinweise
Der vorhandene Fensterklassenname wird in m_lpszClassName gespeichert. Create
erstellt dann basierend auf dieser neuen Klasse ein Fenster. Das neu erstellte Fenster wird automatisch an das CContainedWindowT
Objekt angefügt.
Hinweis
Rufen Sie nicht aufCreate
, wenn Sie "SubclassWindow" bereits aufgerufen haben.
Hinweis
Wenn 0 als Wert für den MenuOrID-Parameter verwendet wird, muss er als 0U (Standardwert) angegeben werden, um einen Compilerfehler zu vermeiden.
CContainedWindowT::D efWindowProc
Wird von WindowProc aufgerufen, um Nachrichten zu verarbeiten, die nicht von der Nachrichtenzuordnung verarbeitet werden.
LRESULT DefWindowProc()
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
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.
CContainedWindowT::GetCurrentMessage
Gibt die aktuelle Nachricht (m_pCurrentMsg
) zurück.
const _ATL_MSG* GetCurrentMessage();
Rückgabewert
Die aktuelle Nachricht, verpackt in der MSG
Struktur.
CContainedWindowT::m_dwMsgMapID
Enthält den Bezeichner der Nachrichtenzuordnung, die derzeit für das enthaltene Fenster verwendet wird.
DWORD m_dwMsgMapID;
Hinweise
Diese Nachrichtenzuordnung muss im enthaltenden Objekt deklariert werden.
Die standardmäßige Nachrichtenzuordnung, die mit BEGIN_MSG_MAP deklariert wird, wird immer durch Null identifiziert. Eine alternative Nachrichtenzuordnung, die mit ALT_MSG_MAP(msgMapID)deklariert ist, wird durch msgMapID
identifiziert.
m_dwMsgMapID
wird zuerst vom Konstruktor initialisiert und kann durch Aufrufen von SwitchMessageMap geändert werden. Ein Beispiel finden Sie unter " CContainedWindowT Overview".
CContainedWindowT::m_lpszClassName
Gibt den Namen einer vorhandenen Fensterklasse an.
LPTSTR m_lpszClassName;
Hinweise
Wenn Sie ein Fenster erstellen, registriert Create eine neue Fensterklasse, die auf dieser vorhandenen Klasse basiert, verwendet jedoch CContainedWindowT::WindowProc.
m_lpszClassName
wird vom Konstruktor initialisiert. Ein Beispiel finden Sie in der Übersicht über CContainedWindowT.
CContainedWindowT::m_pfnSuperWindowProc
Wenn das enthaltene Fenster unterklassigt ist, m_pfnSuperWindowProc
verweist sie auf die ursprüngliche Fensterprozedur der Fensterklasse.
WNDPROC m_pfnSuperWindowProc;
Hinweise
Wenn das enthaltene Fenster überklassigt ist, d. h., es basiert auf einer Fensterklasse, die eine vorhandene Klasse ändert, m_pfnSuperWindowProc
verweist auf die Fensterprozedur der vorhandenen Fensterklasse.
Die DefWindowProc-Methode sendet Nachrichteninformationen an die in m_pfnSuperWindowProc
der Fensterprozedur gespeicherte Fensterprozedur.
CContainedWindowT::m_pObject
Verweist auf das Objekt, das das CContainedWindowT
Objekt enthält.
CMessageMap* m_pObject;
Hinweise
Dieser Container, dessen Klasse von CMessageMap abgeleitet werden muss, deklariert die vom enthaltenen Fenster verwendete Nachrichtenzuordnung.
m_pObject
wird vom Konstruktor initialisiert. Ein Beispiel finden Sie in der Übersicht über CContainedWindowT.
CContainedWindowT::RegisterWndSuperclass
Wird von Create aufgerufen, um die Fensterklasse des enthaltenen Fensters zu registrieren.
ATOM RegisterWndSuperClass();
Rückgabewert
Bei erfolgreicher Ausführung identifiziert ein Atom die Fensterklasse, die registriert wird; andernfalls 0.
Hinweise
Diese Fensterklasse basiert auf einer vorhandenen Klasse, verwendet jedoch CContainedWindowT::WindowProc. Der Name und die Fensterprozedur der vorhandenen Fensterklasse werden in m_lpszClassName bzw . m_pfnSuperWindowProc gespeichert.
CContainedWindowT::SubclassWindow
Unterklassen des durch hWnd identifizierten Fensters und fügt es an das CContainedWindowT
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 CContainedWindowT::WindowProc. Die ursprüngliche Fensterprozedur wird in m_pfnSuperWindowProc gespeichert.
Hinweis
Rufen Sie nicht aufSubclassWindow
, wenn Sie "Create" bereits aufgerufen haben.
CContainedWindowT::SwitchMessageMap
Änderungen, mit denen die Nachrichtenzuordnung verarbeitet werden soll.
void SwitchMessageMap(DWORD dwMsgMapID);
Parameter
dwMsgMapID
[in] Der Nachrichtenzuordnungsbezeichner. Um die standardnachrichtenzuordnung zu verwenden, die mit BEGIN_MSG_MAP deklariert ist, übergeben Sie Null. Um eine alternative Nachrichtenzuordnung zu verwenden, die mit ALT_MSG_MAP(msgMapID)deklariert ist, übergeben msgMapID
Sie .
Hinweise
Die Nachrichtenzuordnung muss im enthaltenden Objekt definiert werden.
Sie geben zunächst den Nachrichtenzuordnungsbezeichner im Konstruktor an.
CContainedWindowt::UnsubclassWindow
Trennt das Unterklassenfenster vom CContainedWindowT
Objekt und stellt die ursprüngliche Fensterprozedur wieder her, die in m_pfnSuperWindowProc gespeichert ist.
HWND UnsubclassWindow(BOOL bForce = FALSE);
Parameter
bForce
[in] Legen Sie auf TRUE fest, damit die ursprüngliche Fensterprozedur wiederhergestellt wird, auch wenn die Fensterprozedur für dieses CContainedWindowT
Objekt derzeit nicht aktiv ist. Wenn bForce auf FALSE festgelegt ist und die Fensterprozedur für dieses CContainedWindowT
Objekt derzeit nicht aktiv ist, wird die ursprüngliche Fensterprozedur nicht wiederhergestellt.
Rückgabewert
Das Handle für das Fenster, das zuvor unterklassigt wurde. Wenn bForce auf FALSE festgelegt ist und die Fensterprozedur für dieses CContainedWindowT
Objekt derzeit nicht aktiv ist, wird NULL zurückgegeben.
Hinweise
Verwenden Sie diese Methode nur, wenn Sie die ursprüngliche Fensterprozedur wiederherstellen möchten, bevor das Fenster zerstört wird. Andernfalls führt WindowProc dies automatisch aus, wenn das Fenster zerstört wird.
CContainedWindowT::WindowProc
Diese statische Methode 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
leitet Nachrichten an die von m_dwMsgMapID identifizierte Nachrichtenzuordnung weiter. Ruft bei Bedarf WindowProc
DefWindowProc für die zusätzliche Nachrichtenverarbeitung auf.
Siehe auch
CWindow-Klasse
CWindowImpl-Klasse
CMessageMap-Klasse
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Klassenübersicht