Share via


Klasse CWindowImpl

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

CMessageMap

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.

Zie ook

BEGIN_MSG_MAP
CComControl-klasse
Overzicht van klassen