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.
Biedt methoden voor het maken of subklassen van een venster.
Belangrijk
Deze klasse en de bijbehorende leden kunnen niet worden gebruikt in toepassingen die worden uitgevoerd in Windows Runtime.
Syntaxis
template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>
Parameterwaarden
T
Uw nieuwe klasse, afgeleid van CWindowImpl.
TBase
De basisklasse van uw klas. Standaard is de basisklasse CWindow.
TWinTraits
Een eigenschappenklasse die stijlen voor uw venster definieert. De standaardwaarde is CControlWinTraits.
Leden
Openbare methoden
| Naam | Description |
|---|---|
| CWindowImpl::Create | Hiermee maakt u een venster. |
CWindowImplBaseT-methoden
| Naam | Description |
|---|---|
| DefWindowProc | Biedt standaard berichtverwerking. |
| GetCurrentMessage | Retourneert het huidige bericht. |
| GetWindowProc | Retourneert de huidige vensterprocedure. |
| OnFinalMessage | Aangeroepen nadat het laatste bericht is ontvangen (meestal WM_NCDESTROY). |
| SubklasseWindow | Een venster subklassen. |
| UnsubclassWindow | Hiermee wordt een eerder subklassevenster hersteld. |
Statische methoden
| Naam | Description |
|---|---|
| GetWndClassInfo | Retourneert een statisch exemplaar van CWndClassInfo, waarmee de vensterklassegegevens worden beheerd. |
| WindowProc | Hiermee worden berichten verwerkt die naar het venster worden verzonden. |
Gegevensleden
| Naam | Description |
|---|---|
| m_pfnSuperWindowProc | Verwijst naar de oorspronkelijke vensterprocedure van de vensterklasse. |
Opmerkingen
U kunt CWindowImpl een venster of subklasse van een bestaand venster maken. in de CWindowImpl vensterprocedure wordt een berichttoewijzing gebruikt om berichten naar de juiste handlers te sturen.
CWindowImpl::Create maakt een venster op basis van de vensterklassegegevens die worden beheerd door CWndClassInfo.
CWindowImpl bevat de DECLARE_WND_CLASS macro, wat betekent dat CWndClassInfo er een nieuwe vensterklasse wordt geregistreerd. Als u een bestaande vensterklasse wilt geven, moet u uw klas afleiden uit CWindowImpl en de DECLARE_WND_SUPERCLASS macro opnemen. In dit geval CWndClassInfo registreert u een vensterklasse die is gebaseerd op een bestaande klasse, maar gebruikt CWindowImpl::WindowProc. Voorbeeld:
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
Opmerking
Omdat CWndClassInfo de informatie voor slechts één vensterklasse wordt beheerd, is elk venster dat is gemaakt via een exemplaar, CWindowImpl gebaseerd op dezelfde vensterklasse.
CWindowImpl ondersteunt ook venstersubklassen. De SubclassWindow methode koppelt een bestaand venster aan het CWindowImpl object en wijzigt de vensterprocedure in CWindowImpl::WindowProc. Elk exemplaar van CWindowImpl kan een ander venster subklassen hebben.
Opmerking
Voor een bepaald CWindowImpl object roept u een Create van beide aan of SubclassWindow. Roep beide methoden niet aan voor hetzelfde object.
Daarnaast CWindowImplbiedt ATL CContainedWindow om een venster te maken dat is opgenomen in een ander object.
De basisklassedestructor (~ CWindowImplRoot) zorgt ervoor dat het venster is verdwenen voordat het object wordt vernietigd.
CWindowImpl is afgeleid van CWindowImplBaseT, die is afgeleid van CWindowImplRoot, die is afgeleid van TBase en CMessageMap.
| Voor meer informatie over | Zien! |
|---|---|
| Besturingselementen maken | ATL-zelfstudie |
| Windows gebruiken in ATL | ATL-vensterklassen |
| Wizard ATL-project | Een ATL-project maken |
Overnamehiërarchie
TBase
CWindowImplRoot
CWindowImplBaseT
CWindowImpl
Requirements
Koptekst: atlwin.h
CWindowImpl::Create
Hiermee maakt u een venster op basis van een nieuwe vensterklasse.
HWND Create(
HWND hWndParent,
_U_RECT rect = NULL,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Parameterwaarden
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. Deze waarde wordt gecombineerd met de stijl van de eigenschappenklasse voor het venster. De standaardwaarde geeft de eigenschappenklasse volledige controle over de stijl. Zie CreateWindow in de Windows SDK voor een lijst met mogelijke waarden.
dwExStyle
[in] De stijl van het uitgebreide venster. Deze waarde wordt gecombineerd met de stijl van de eigenschappenklasse voor het venster. De standaardwaarde geeft de eigenschappenklasse volledige controle over de stijl. 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 weergegeven. Zo niet, NULL.
Opmerkingen
Create registreert eerst de vensterklasse als deze nog niet is geregistreerd. Het zojuist gemaakte venster wordt automatisch aan het CWindowImpl object gekoppeld.
Opmerking
Roep niet aan Create als u subklasseWindow al hebt aangeroepen.
Als u een vensterklasse wilt gebruiken die is gebaseerd op een bestaande vensterklasse, moet u uw klas afleiden uit CWindowImpl en de DECLARE_WND_SUPERCLASS macro opnemen. De vensterprocedure van de bestaande vensterklasse wordt opgeslagen in m_pfnSuperWindowProc. Zie het overzicht van CWindowImpl voor meer informatie.
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.
CWindowImpl::D efWindowProc
Aangeroepen door WindowProc om berichten te verwerken die niet worden verwerkt door de berichttoewijzing.
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
LRESULT DefWindowProc();
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.
De functie zonder parameters haalt automatisch de benodigde parameters op uit het huidige bericht.
CWindowImpl::GetCurrentMessage
Retourneert het huidige bericht, verpakt in de MSG structuur.
const MSG* GetCurrentMessage();
Retourwaarde
Het huidige bericht.
CWindowImpl::GetWindowProc
Retourneert WindowProc, de huidige vensterprocedure.
virtual WNDPROC GetWindowProc();
Retourwaarde
De huidige vensterprocedure.
Opmerkingen
Overschrijf deze methode om de vensterprocedure door uw eigen vensterprocedure te vervangen.
CWindowImpl::GetWndClassInfo
Aangeroepen door Maken om toegang te krijgen tot de vensterklassegegevens.
static CWndClassInfo& GetWndClassInfo();
Retourwaarde
Een statisch exemplaar van CWndClassInfo.
Opmerkingen
Deze methode wordt standaard CWindowImpl verkregen via de DECLARE_WND_CLASS macro, waarmee een nieuwe vensterklasse wordt opgegeven.
Als u een bestaande vensterklasse wilt superklassen, moet u uw klas afleiden uit CWindowImpl en de DECLARE_WND_SUPERCLASS macro opnemen die u wilt overschrijven GetWndClassInfo. Zie het overzicht van CWindowImpl voor meer informatie.
Naast het gebruik van de DECLARE_WND_CLASS en DECLARE_WND_SUPERCLASS macro's, kunt u overschrijven GetWndClassInfo met uw eigen implementatie.
CWindowImpl::m_pfnSuperWindowProc
Afhankelijk van het venster verwijst u naar een van de volgende vensterprocedures.
WNDPROC m_pfnSuperWindowProc;
Opmerkingen
| Type venster | Vensterprocedure |
|---|---|
| Een venster op basis van een nieuwe vensterklasse die is opgegeven via de DECLARE_WND_CLASS macro. | De functie DefWindowProc Win32. |
| Een venster op basis van een vensterklasse die een bestaande klasse wijzigt, die is opgegeven via de DECLARE_WND_SUPERCLASS macro. | De vensterprocedure van de bestaande vensterklasse. |
| Een subklassevenster. | De oorspronkelijke vensterprocedure van het subklassevenster. |
CWindowImpl::D efWindowProc verzendt berichtgegevens naar de vensterprocedure die is opgeslagen in m_pfnSuperWindowProc.
CWindowimpl::OnFinalMessage
Aangeroepen na ontvangst van het laatste bericht (meestal WM_NCDESTROY).
virtual void OnFinalMessage(HWND hWnd);
Parameterwaarden
hWnd
[in] Een handgreep naar het raam dat wordt vernietigd.
Opmerkingen
De standaard implementatie van OnFinalMessage doet niets, maar u kunt deze functie overschrijven om opschoning af te handelen voordat een venster wordt vernietigd. Als u uw object automatisch wilt verwijderen bij de vernieling van het venster, kunt u deze functie aanroepen delete this; .
CWindowImpl::SubclassWindow
Subklassen van het venster dat is geïdentificeerd door hWnd en koppelt het aan het CWindowImpl 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
Het subklassevenster maakt nu gebruik van CWindowImpl::WindowProc. De oorspronkelijke vensterprocedure wordt opgeslagen in m_pfnSuperWindowProc.
Opmerking
Roep niet aan SubclassWindow als u Maken al hebt aangeroepen.
CWindowImpl::UnsubclassWindow
Loskoppelt het subklassevenster van het CWindowImpl object en herstelt de oorspronkelijke vensterprocedure, opgeslagen in m_pfnSuperWindowProc.
HWND UnsubclassWindow();
Retourwaarde
De ingang naar het venster dat eerder is gesubklasseerd.
CWindowImpl::WindowProc
Met deze statische functie 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 gebruikt de standaardberichttoewijzing (gedeclareerd met BEGIN_MSG_MAP) om berichten naar de juiste handlers te sturen. Roept indien nodig WindowProcDefWindowProc aan voor aanvullende berichtverwerking. Als het laatste bericht niet wordt verwerkt, WindowProc doet u het volgende:
Voert niet-subklassen uit als het venster niet is gedesubklasseerd.
Wist
m_hWnd.Roept OnFinalMessage aan voordat het venster wordt vernietigd.
U kunt overschrijven WindowProc om een ander mechanisme te bieden voor het verwerken van berichten.