Share via


Klasse CContainedWindowT

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Met deze klasse wordt een venster geïmplementeerd dat zich in een ander object bevindt.

Belangrijk

Deze klasse en de bijbehorende leden kunnen niet worden gebruikt in toepassingen die worden uitgevoerd in Windows Runtime.

Syntaxis

template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase

Parameterwaarden

TBase
De basisklasse van uw nieuwe klasse. De standaardbasisklasse is CWindow.

TWinTraits
Een eigenschappenklasse die stijlen voor uw venster definieert. De standaardwaarde is CControlWinTraits.

Opmerking

CContainedWindow is een specialisatie van CContainedWindowT. Als u de basisklasse of eigenschappen wilt wijzigen, gebruikt CContainedWindowT u deze rechtstreeks.

Leden

Openbare constructors

Naam Description
CContainedWindowT::CContainedWindowT Bouwer. Initialiseert gegevensleden om op te geven welke berichttoewijzing de berichten van het ingesloten venster verwerkt.

Openbare methoden

Naam Description
CContainedWindowT::Create Hiermee maakt u een venster.
CContainedWindowT::D efWindowProc Biedt standaard berichtverwerking.
CContainedWindowT::GetCurrentMessage Retourneert het huidige bericht.
CContainedWindowT::RegisterWndSuperclass Registreert de vensterklasse van het ingesloten venster.
CContainedWindowT::SubclassWindow Een venster subklassen.
CContainedWindowT::SwitchMessageMap Hiermee wijzigt u welke berichttoewijzing wordt gebruikt om de berichten van het ingesloten venster te verwerken.
CContainedWindowT::UnsubclassWindow Hiermee wordt een eerder subklassevenster hersteld.
CContainedWindowT::WindowProc (Statisch) Hiermee worden berichten verwerkt die naar het ingesloten venster worden verzonden.

Publieke dataleden

Naam Description
CContainedWindowT::m_dwMsgMapID Hiermee wordt aangegeven welke berichttoewijzing de berichten van het ingesloten venster verwerkt.
CContainedWindowT::m_lpszClassName Hiermee geeft u de naam op van een bestaande vensterklasse waarop een nieuwe vensterklasse wordt gebaseerd.
CContainedWindowT::m_pfnSuperWindowProc Verwijst naar de oorspronkelijke vensterprocedure van de vensterklasse.
CContainedWindowT::m_pObject Verwijst naar het betreffende object.

Opmerkingen

CContainedWindowT implementeert een venster in een ander object. CContainedWindowTDe vensterprocedure maakt gebruik van een berichttoewijzing in het betreffende object om berichten naar de juiste handlers te sturen. Bij het maken van een CContainedWindowT object geeft u op welke berichttoewijzing moet worden gebruikt.

CContainedWindowT hiermee kunt u een nieuw venster maken door een bestaande vensterklasse te classificeren. De Create methode registreert eerst een vensterklasse die is gebaseerd op een bestaande klasse, maar gebruikt CContainedWindowT::WindowProc. Create maakt vervolgens een venster op basis van deze nieuwe vensterklasse. Elk exemplaar van CContainedWindowT kan een andere vensterklasse superklasse hebben.

CContainedWindowT ondersteunt ook venstersubklassen. De SubclassWindow methode koppelt een bestaand venster aan het CContainedWindowT object en wijzigt de vensterprocedure in CContainedWindowT::WindowProc. Elk exemplaar van CContainedWindowT kan een ander venster subklassen hebben.

Opmerking

Voor een bepaald CContainedWindowT object roept u een Create van beide aan of SubclassWindow. U moet beide methoden voor hetzelfde object niet aanroepen.

Wanneer u het besturingselement Toevoegen gebruikt op basis van de optie in de wizard ATL-project, voegt de wizard automatisch een CContainedWindowT gegevenslid toe aan de klasse die het besturingselement implementeert. In het volgende voorbeeld ziet u hoe het ingesloten venster wordt gedeclareerd:

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;
}
Voor meer informatie over Zien!
Besturingselementen maken ATL-zelfstudie
Windows gebruiken in ATL ATL-vensterklassen
Wizard ATL-project Een ATL-project maken
Windows Windows en volgende onderwerpen in de Windows SDK

Overnamehiërarchie

TBase

CContainedWindowT

Requirements

Koptekst: atlwin.h

CContainedWindowT::CContainedWindowT

De constructor initialiseert gegevensleden.

CContainedWindowT(
    LPTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

CContainedWindowT(
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0)
    CContainedWindowT();

Parameterwaarden

lpszClassName
[in] De naam van een bestaande vensterklasse waarop het ingesloten venster wordt gebaseerd.

pObject-
[in] Een aanwijzer naar het betreffende object dat de berichttoewijzing declareert. De klasse van dit object moet zijn afgeleid van CMessageMap.

dwMsgMapID
[in] Identificeert de berichttoewijzing waarmee de berichten van het ingesloten venster worden verwerkt. De standaardwaarde, 0, geeft de standaardberichttoewijzing aan die is gedeclareerd met BEGIN_MSG_MAP. Als u een alternatieve berichttoewijzing wilt gebruiken die is gedeclareerd met ALT_MSG_MAP(msgMapID), geeft u door msgMapID.

Opmerkingen

Als u een nieuw venster wilt maken via Maken, moet u de naam van een bestaande vensterklasse doorgeven voor de parameter lpszClassName . Zie het overzicht van CContainedWindow voor een voorbeeld.

Er zijn drie constructors:

  • De constructor met drie argumenten is de constructor die doorgaans wordt aangeroepen.

  • De constructor met twee argumenten gebruikt de klassenaam van TBase::GetWndClassName.

  • De constructor zonder argumenten wordt gebruikt als u de argumenten later wilt opgeven. U moet de naam van de vensterklasse, het berichtkaartobject en de berichttoewijzings-id opgeven wanneer u later aanroept Create.

Als u een bestaand venster subklassen maakt via SubclassWindow, wordt de waarde lpszClassName niet gebruikt; Daarom kunt u NULL doorgeven voor deze parameter.

CContainedWindowT::Create

Roept RegisterWndSuperclass aan om een vensterklasse te registreren die is gebaseerd op een bestaande klasse, maar CContainedWindowT::WindowProc gebruikt.

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);

Parameterwaarden

lpszClassName
[in] De naam van een bestaande vensterklasse waarop het ingesloten venster wordt gebaseerd.

pObject-
[in] Een aanwijzer naar het betreffende object dat de berichttoewijzing declareert. De klasse van dit object moet zijn afgeleid van CMessageMap.

dwMsgMapID
[in] Identificeert de berichttoewijzing waarmee de berichten van het ingesloten venster worden verwerkt. De standaardwaarde, 0, geeft de standaardberichttoewijzing aan die is gedeclareerd met BEGIN_MSG_MAP. Als u een alternatieve berichttoewijzing wilt gebruiken die is gedeclareerd met ALT_MSG_MAP(msgMapID), geeft u door msgMapID.

hWndParent
[in] De ingang naar het bovenliggende of eigenaarsvenster.

Rect
[in] Een RECT-structuur die de positie van het venster aangeeft. U RECT kunt de aanwijzer of naslaginformatie doorgeven.

szWindowName
[in] Hiermee geeft u de naam van het venster. De standaardwaarde is NULL.

dwStyle
[in] De stijl van het venster. De standaardwaarde is WS_CHILD | WS_VISIBLE. Zie CreateWindow in de Windows SDK voor een lijst met mogelijke waarden.

dwExStyle
[in] De stijl van het uitgebreide venster. De standaardwaarde is 0, wat betekent dat er geen uitgebreide stijl is. Zie CreateWindowEx in de Windows SDK voor een lijst met mogelijke waarden.

MenuOrID
[in] Voor een onderliggend venster, de venster-id. Voor een venster op het hoogste niveau, een menugreep voor het venster. De standaardwaarde is 0U.

lpCreateParam
[in] Een aanwijzer naar gegevens voor het maken van vensters. Zie de beschrijving voor de laatste parameter voor CreateWindowEx voor een volledige beschrijving.

Retourwaarde

Als dit lukt, wordt de ingang naar het zojuist gemaakte venster verzonden; anders, NULL.

Opmerkingen

De naam van de bestaande vensterklasse wordt opgeslagen in m_lpszClassName. Create maakt vervolgens een venster op basis van deze nieuwe klasse. Het zojuist gemaakte venster wordt automatisch aan het CContainedWindowT object gekoppeld.

Opmerking

Roep niet aan Create als u subklasseWindow al hebt aangeroepen.

Opmerking

Als 0 wordt gebruikt als de waarde voor de parameter MenuOrID , moet deze worden opgegeven als 0U (de standaardwaarde) om een compilerfout te voorkomen.

CContainedWindowT::D efWindowProc

Aangeroepen door WindowProc om berichten te verwerken die niet worden verwerkt door de berichttoewijzing.

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

Parameterwaarden

uMsg
[in] Het bericht dat naar het venster is verzonden.

wParam
[in] Aanvullende berichtspecifieke informatie.

lParam
[in] Aanvullende berichtspecifieke informatie.

Retourwaarde

Het resultaat van de berichtverwerking.

Opmerkingen

DefWindowProc Roept standaard de functie CallWindowProc Win32 aan om de berichtgegevens te verzenden naar de vensterprocedure die is opgegeven in m_pfnSuperWindowProc.

CContainedWindowT::GetCurrentMessage

Retourneert het huidige bericht (m_pCurrentMsg).

const _ATL_MSG* GetCurrentMessage();

Retourwaarde

Het huidige bericht, verpakt in de MSG structuur.

CContainedWindowT::m_dwMsgMapID

Bevat de id van de berichttoewijzing die momenteel wordt gebruikt voor het ingesloten venster.

DWORD m_dwMsgMapID;

Opmerkingen

Deze berichttoewijzing moet worden gedeclareerd in het bijbehorende object.

De standaardberichttoewijzing, gedeclareerd met BEGIN_MSG_MAP, wordt altijd geïdentificeerd door nul. Een alternatieve berichtkaart, gedeclareerd met ALT_MSG_MAP(msgMapID), wordt geïdentificeerd door msgMapID.

m_dwMsgMapID wordt eerst geïnitialiseerd door de constructor en kan worden gewijzigd door SwitchMessageMap aan te roepen. Zie het overzicht van CContainedWindowT voor een voorbeeld.

CContainedWindowT::m_lpszClassName

Hiermee geeft u de naam van een bestaande vensterklasse.

LPTSTR m_lpszClassName;

Opmerkingen

Wanneer u een venster maakt, registreert Maken een nieuwe vensterklasse die is gebaseerd op deze bestaande klasse, maar CContainedWindowT::WindowProc gebruikt.

m_lpszClassName wordt geïnitialiseerd door de constructor. Zie het overzicht van CContainedWindowT voor een voorbeeld.

CContainedWindowT::m_pfnSuperWindowProc

Als het ingesloten venster subklasse is, m_pfnSuperWindowProc verwijst u naar de oorspronkelijke vensterprocedure van de vensterklasse.

WNDPROC m_pfnSuperWindowProc;

Opmerkingen

Als het ingesloten venster wordt vervangen, wat betekent dat het is gebaseerd op een vensterklasse die een bestaande klasse wijzigt, m_pfnSuperWindowProc wijst u naar de vensterprocedure van de bestaande vensterklasse.

De methode DefWindowProc verzendt berichtgegevens naar de vensterprocedure die is opgeslagen in m_pfnSuperWindowProc.

CContainedWindowT::m_pObject

Verwijst naar het object dat het CContainedWindowT object bevat.

CMessageMap* m_pObject;

Opmerkingen

Deze container, waarvan de klasse moet zijn afgeleid van CMessageMap, declareert de berichtkaart die wordt gebruikt door het ingesloten venster.

m_pObject wordt geïnitialiseerd door de constructor. Zie het overzicht van CContainedWindowT voor een voorbeeld.

CContainedWindowT::RegisterWndSuperclass

Aangeroepen door Maken om de vensterklasse van het ingesloten venster te registreren.

ATOM RegisterWndSuperClass();

Retourwaarde

Als dit lukt, identificeert een atoom dat de vensterklasse die uniek wordt geregistreerd; anders, nul.

Opmerkingen

Deze vensterklasse is gebaseerd op een bestaande klasse, maar maakt gebruik van CContainedWindowT::WindowProc. De naam en vensterprocedure van de bestaande vensterklasse worden opgeslagen in respectievelijk m_lpszClassName en m_pfnSuperWindowProc.

CContainedWindowT::SubclassWindow

Subklassen van het venster dat is geïdentificeerd door hWnd en koppelt het aan het CContainedWindowT object.

BOOL SubclassWindow(HWND hWnd);

Parameterwaarden

hWnd
[in] De greep naar het venster dat wordt subklassen.

Retourwaarde

WAAR als het venster is gesubklasseerd; anders, ONWAAR.

Opmerkingen

In het subklassevenster wordt nu CContainedWindowT::WindowProc gebruikt. De oorspronkelijke vensterprocedure wordt opgeslagen in m_pfnSuperWindowProc.

Opmerking

Roep niet aan SubclassWindow als u Maken al hebt aangeroepen.

CContainedWindowT::SwitchMessageMap

Wijzigingen in welke berichttoewijzing wordt gebruikt om de berichten van het ingesloten venster te verwerken.

void SwitchMessageMap(DWORD dwMsgMapID);

Parameterwaarden

dwMsgMapID
[in] De id van de berichttoewijzing. Als u de standaardberichttoewijzing wilt gebruiken die is gedeclareerd met BEGIN_MSG_MAP, geeft u nul door. Als u een alternatieve berichttoewijzing wilt gebruiken die is gedeclareerd met ALT_MSG_MAP(msgMapID), geeft u door msgMapID.

Opmerkingen

De berichttoewijzing moet worden gedefinieerd in het object dat het bevat.

U geeft in eerste instantie de berichttoewijzings-id op in de constructor.

CContainedWindowT::UnsubclassWindow

Loskoppelt het subklassevenster van het CContainedWindowT object en herstelt de oorspronkelijke vensterprocedure, opgeslagen in m_pfnSuperWindowProc.

HWND UnsubclassWindow(BOOL bForce = FALSE);

Parameterwaarden

bForce
[in] Ingesteld op TRUE om af te dwingen dat de oorspronkelijke vensterprocedure wordt hersteld, zelfs als de vensterprocedure voor dit CContainedWindowT object momenteel niet actief is. Als bForce is ingesteld op FALSE en de vensterprocedure voor dit CContainedWindowT object momenteel niet actief is, wordt de oorspronkelijke vensterprocedure niet hersteld.

Retourwaarde

De ingang naar het venster dat eerder is gesubklasseerd. Als bForce is ingesteld op FALSE en de vensterprocedure voor dit CContainedWindowT object momenteel niet actief is, wordt NULL geretourneerd.

Opmerkingen

Gebruik deze methode alleen als u de oorspronkelijke vensterprocedure wilt herstellen voordat het venster wordt vernietigd. Anders doet WindowProc dit automatisch wanneer het venster wordt vernietigd.

CContainedWindowT::WindowProc

Met deze statische methode wordt de vensterprocedure geïmplementeerd.

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

Parameterwaarden

hWnd
[in] De greep naar het venster.

uMsg
[in] Het bericht dat naar het venster is verzonden.

wParam
[in] Aanvullende berichtspecifieke informatie.

lParam
[in] Aanvullende berichtspecifieke informatie.

Retourwaarde

Het resultaat van de berichtverwerking.

Opmerkingen

WindowProc stuurt berichten door naar de berichtenkaart die is geïdentificeerd door m_dwMsgMapID. Roept indien nodig WindowProcDefWindowProc aan voor aanvullende berichtverwerking.

Zie ook

CWindow-klasse
Klasse CWindowImpl
CMessageMap-klasse
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Overzicht van klassen