Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
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.