Megosztás a következőn keresztül:


CWindowImpl osztály

Megjegyzés:

Az aktív sablontár (ATL) továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Metódusokat biztosít egy ablak létrehozásához vagy alosztályozásához.

Fontos

Ez az osztály és tagjai nem használhatók a Windows futtatókörnyezetben futó alkalmazásokban.

Szemantika

template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>

Paraméterek

T
Az új osztály, származik CWindowImpl.

TBase
Az osztály alaposztálya. Alapértelmezés szerint az alaposztály a CWindow.

TWinTraits
Az ablak stílusait meghatározó tulajdonságok osztálya . Az alapértelmezett érték a CControlWinTraits.

Tagok

Nyilvános módszerek

Név Description
CWindowImpl::Létrehozás Létrehoz egy ablakot.

CWindowImplBaseT metódusok

Név Description
DefWindowProc Alapértelmezett üzenetfeldolgozást biztosít.
GetCurrentMessage Az aktuális üzenetet adja vissza.
GetWindowProc Az aktuális ablak eljárást adja vissza.
OnFinalMessage Az utolsó üzenet fogadása után hívjuk meg (általában WM_NCDESTROY).
SubclassWindow Egy ablak alosztálya.
UnsubclassWindow Visszaállít egy korábban alosztályozott ablakot.

Statikus metódusok

Név Description
GetWndClassInfo A CWndClassInfo statikus példányát adja vissza, amely kezeli az ablakosztály adatait.
WindowProc Feldolgozza az ablakba küldött üzeneteket.

Adattagok

Név Description
m_pfnSuperWindowProc Az ablakosztály eredeti ablakeljárására mutat.

Megjegyzések

Meglévő ablakot vagy alosztályt is CWindowImpl létrehozhat. az CWindowImpl ablakos eljárás egy üzenettérkép használatával irányítja az üzeneteket a megfelelő kezelőknek.

CWindowImpl::Create létrehoz egy ablakot a CWndClassInfo által felügyelt ablakosztály-információk alapján. CWindowImpl a DECLARE_WND_CLASS makrót tartalmazza, ami azt jelenti, hogy CWndClassInfo új ablakosztályt regisztrál. Ha egy meglévő ablakosztályt szeretne szuperosztályba sorolni, származtathatja az osztályt, CWindowImpl és belefoglalhatja a DECLARE_WND_SUPERCLASS makrót. Ebben az esetben egy meglévő osztályon alapuló, CWndClassInfo de használt CWindowImpl::WindowProcablakosztályt regisztrál. Például:

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

Megjegyzés:

Mivel CWndClassInfo csak egy ablakosztály adatait kezeli, az egy példányon CWindowImpl keresztül létrehozott összes ablak ugyanazon az ablakosztályon alapul.

CWindowImpl az ablak alosztályozását is támogatja. A SubclassWindow metódus egy meglévő ablakot csatol az CWindowImpl objektumhoz, és az ablakeljárást a következőre CWindowImpl::WindowProcmódosítja: . Az egyes példányok CWindowImpl egy másik ablakot alosztályozzanak.

Megjegyzés:

Bármely adott CWindowImpl objektum esetén hívja meg a CreateSubclassWindowvagy a . Ne hívja meg mindkét metódust ugyanazon az objektumon.

CWindowImplAz ATL emellett a CContainedWindow szolgáltatást is biztosítja egy másik objektumban található ablak létrehozásához.

Az alaposztály-destruktor (~ CWindowImplRoot) biztosítja, hogy az ablak eltűnik, mielőtt az objektum megsemmisül.

CWindowImpl származik CWindowImplBaseT, amely származik CWindowImplRoot, amely származik TBase , és a CMessageMap.

További információ erről: Nézze
Vezérlők létrehozása ATL-oktatóanyag
Windows használata az ATL-ben ATL ablakosztályok
ATL-projekt varázsló ATL-projekt létrehozása

Öröklési hierarchia

CMessageMap

TBase

CWindowImplRoot

CWindowImplBaseT

CWindowImpl

Requirements

Fejléc: atlwin.h

CWindowImpl::Létrehozás

Új ablakosztály alapján hoz létre egy ablakot.

HWND Create(
    HWND hWndParent,
    _U_RECT rect = NULL,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

Paraméterek

hWndParent
[in] A szülő vagy a tulajdonos ablakának leírója.

téglalap
[in] Az ablak pozícióját meghatározó RECT-struktúra. A RECT mutatóval vagy hivatkozással továbbítható.

szWindowName
[in] Az ablak nevét adja meg. Az alapértelmezett érték NULL.

dwStyle
[in] Az ablak stílusa. Ez az érték az ablak tulajdonságosztálya által biztosított stílussal van kombinálva. Az alapértelmezett érték teljes mértékben szabályozza a tulajdonságok osztályát a stílus felett. A lehetséges értékek listáját a CreateWindow a Windows SDK-ban találja.

dwExStyle
[in] A kiterjesztett ablakstílus. Ez az érték az ablak tulajdonságosztálya által biztosított stílussal van kombinálva. Az alapértelmezett érték teljes mértékben szabályozza a tulajdonságok osztályát a stílus felett. A lehetséges értékek listáját a CreateWindowEx a Windows SDK-ban találja.

MenuOrID
[in] Gyermekablak esetén az ablak azonosítója. Felső szintű ablak esetén az ablak menüfogópontja. Az alapértelmezett érték 0U.

lpCreateParam
[in] Mutató az ablaklétrehozás adataihoz. A teljes leírásért tekintse meg a CreateWindowEx végső paraméterének leírását.

Visszaadott érték

Ha sikeres, az újonnan létrehozott ablak fogópontja. Ellenkező esetben NULL.

Megjegyzések

Create először regisztrálja az ablakosztályt, ha még nincs regisztrálva. Az újonnan létrehozott ablak automatikusan csatlakozik az CWindowImpl objektumhoz.

Megjegyzés:

Ne hívjon Create , ha már meghívta a SubclassWindow nevet.

Ha egy meglévő ablakosztályon alapuló ablakosztályt szeretne használni, származtathatja az osztályt CWindowImpl , és belefoglalhatja a DECLARE_WND_SUPERCLASS makrót. A rendszer menti a meglévő ablakosztály ablakeljárását m_pfnSuperWindowProc. További információkért tekintse meg a CWindowImpl áttekintését.

Megjegyzés:

Ha a MenuOrID paraméter értékeként 0 értéket használ, a fordítóhibák elkerülése érdekében 0U-ként (alapértelmezett értékként) kell megadni.

CWindowImpl::D efWindowProc

A WindowProc meghívta az üzenettérkép által nem kezelt üzenetek feldolgozására.

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

LRESULT DefWindowProc();

Paraméterek

uMsg
[in] Az ablakba küldött üzenet.

wParam
[in] További üzenetspecifikus információk.

lParam
[in] További üzenetspecifikus információk.

Visszaadott érték

Az üzenetfeldolgozás eredménye.

Megjegyzések

Alapértelmezés szerint meghívja a CallWindowProc Win32 függvényt, DefWindowProc hogy küldje el az üzenet adatait a m_pfnSuperWindowProc megadott ablakművelethez.

A paraméterek nélküli függvény automatikusan lekéri a szükséges paramétereket az aktuális üzenetből.

CWindowImpl::GetCurrentMessage

A struktúrába MSG csomagolt aktuális üzenetet adja vissza.

const MSG* GetCurrentMessage();

Visszaadott érték

Az aktuális üzenet.

CWindowImpl::GetWindowProc

Visszaadja WindowProcaz aktuális ablak eljárást.

virtual WNDPROC GetWindowProc();

Visszaadott érték

Az aktuális ablak eljárása.

Megjegyzések

Felülbírálja ezt a metódust az ablakeljárás sajátra való lecseréléséhez.

CWindowImpl::GetWndClassInfo

A Create meghívta az ablakosztály adatainak eléréséhez.

static CWndClassInfo& GetWndClassInfo();

Visszaadott érték

A CWndClassInfo statikus példánya.

Megjegyzések

Alapértelmezés szerint CWindowImpl ezt a metódust a DECLARE_WND_CLASS makrón keresztül szerzi be, amely egy új ablakosztályt ad meg.

Meglévő ablakosztály felülbírálásához származtathatja az osztálytCWindowImpl, és a felülbírálandó GetWndClassInfoDECLARE_WND_SUPERCLASS makrót is belefoglalhatja. További információkért tekintse meg a CWindowImpl áttekintését.

A DECLARE_WND_CLASS és DECLARE_WND_SUPERCLASS makrók használata mellett saját implementációval is felülbírálhatja GetWndClassInfo .

CWindowImpl::m_pfnSuperWindowProc

Az ablaktól függően az alábbi ablakeljárások egyikére mutat.

WNDPROC m_pfnSuperWindowProc;

Megjegyzések

Ablak típusa Ablak eljárása
Egy új ablakosztályon alapuló ablak, amely a DECLARE_WND_CLASS makrón keresztül van megadva. A DefWindowProc Win32 függvény.
A DECLARE_WND_SUPERCLASS makrón keresztül megadott meglévő osztályt módosító ablakosztályon alapuló ablak. A meglévő ablakosztály ablakeljárása.
Egy alosztályozott ablak. Az alosztályozott ablak eredeti ablakának eljárása.

CWindowImpl::D efWindowProc üzenetinformációkat küld a fájlba mentett ablakműsorba m_pfnSuperWindowProc.

CWindowImpl::OnFinalMessage

Az utolsó üzenet (általában WM_NCDESTROY) fogadása után hívva.

virtual void OnFinalMessage(HWND hWnd);

Paraméterek

hWnd
[in] Egy fogópont az ablakhoz, ami elpusztul.

Megjegyzések

Az alapértelmezett implementáció OnFinalMessage nem tesz semmit, de felülbírálhatja ezt a függvényt, hogy az ablak megsemmisítése előtt kezelje a törlést. Ha automatikusan törölni szeretné az objektumot az ablak megsemmisítésekor, meghívhatja delete this; ezt a függvényt.

CWindowImpl::SubclassWindow

Alosztályozza a hWnd által azonosított ablakot, és csatolja az CWindowImpl objektumhoz.

BOOL SubclassWindow(HWND hWnd);

Paraméterek

hWnd
[in] Az alosztályozott ablak fogópontja.

Visszaadott érték

IGAZ, ha az ablak sikeresen alosztályozott; egyéb esetben HAMIS.

Megjegyzések

Az alosztályozott ablak mostantól a CWindowImpl::WindowProc parancsot használja. Az eredeti ablakeljárást a rendszer m_pfnSuperWindowProc menti.

Megjegyzés:

Ne hívjon SubclassWindow , ha már meghívta a Létrehozás nevet.

CWindowImpl::UnsubclassWindow

Leválasztja az alosztályozott ablakot az CWindowImpl objektumról, és visszaállítja az eredeti, m_pfnSuperWindowProc mentett ablak eljárást.

HWND UnsubclassWindow();

Visszaadott érték

A korábban alosztályozott ablakhoz tartozó fogópont.

CWindowImpl::WindowProc

Ez a statikus függvény implementálja az ablak eljárást.

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

Paraméterek

hWnd
[in] Az ablak fogópontja.

uMsg
[in] Az ablakba küldött üzenet.

wParam
[in] További üzenetspecifikus információk.

lParam
[in] További üzenetspecifikus információk.

Visszaadott érték

Az üzenetfeldolgozás eredménye.

Megjegyzések

WindowProc Az alapértelmezett ( BEGIN_MSG_MAP deklarált) üzenettérkép használatával irányítja az üzeneteket a megfelelő kezelőkhöz. Szükség esetén WindowProc további üzenetfeldolgozást kér a DefWindowProctól . Ha a végső üzenet nem lesz kezelve, WindowProc a következőt hajtja végre:

  • Leiratkozást hajt végre, ha az ablak nem lett besorolva.

  • Törli a elemet m_hWnd.

  • Meghívja az OnFinalMessage parancsot , mielőtt az ablak megsemmisül.

Felülbírálhatja WindowProc az üzenetek kezelésére szolgáló másik mechanizmust.

Lásd még

BEGIN_MSG_MAP
CComControl-osztály
osztály áttekintése