Share via


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. CContainedWindowTDie 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 msgMapIDSie .

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 Createden 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 msgMapIDSie .

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 msgMapIDidentifiziert.

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_pfnSuperWindowProcder 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 msgMapIDSie .

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