Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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