CWindowImpl – třída
Poskytuje metody pro vytvoření nebo podtřídu okna.
Důležité
Tuto třídu a její členy nelze použít v aplikacích, které se spouští v prostředí Windows Runtime.
Syntaxe
template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>
Parametry
T
Vaše nová třída odvozená z CWindowImpl
.
TBase
Základní třída vaší třídy. Ve výchozím nastavení je základní třída CWindow.
TWinTraits
Třída vlastností, která definuje styly pro vaše okno. Výchozí hodnota je CControlWinTraits
.
Členové
Veřejné metody
Název | Popis |
---|---|
CWindowImpl::Create | Vytvoří okno. |
CWindowImplBaseT – metody
Název | Popis |
---|---|
DefWindowProc | Poskytuje výchozí zpracování zpráv. |
GetCurrentMessage | Vrátí aktuální zprávu. |
GetWindowProc | Vrátí aktuální proceduru okna. |
OnFinalMessage | Volá se po přijetí poslední zprávy (obvykle WM_NCDESTROY). |
PodtřídaWindow | Podtřídy okno. |
UnsubclassWindow | Obnoví dříve podtříděné okno. |
Statické metody
Název | Popis |
---|---|
GetWndClassInfo | Vrátí statickou instanci CWndClassInfo, která spravuje informace třídy okna. |
WindowProc | Zpracovává zprávy odeslané do okna. |
Datové členy
Název | Popis |
---|---|
m_pfnSuperWindowProc | Odkazuje na původní proceduru okna třídy okna. |
Poznámky
Můžete použít CWindowImpl
k vytvoření okna nebo podtřídy existujícího okna. procedura CWindowImpl
okna používá mapu zpráv k nasměrování zpráv na příslušné obslužné rutiny.
CWindowImpl::Create
vytvoří okno založené na informacích třídy okna, které spravuje CWndClassInfo. CWindowImpl
obsahuje DECLARE_WND_CLASS makro, což znamenáCWndClassInfo
, že zaregistruje novou třídu okna. Pokud chcete nadtřídět existující třídu okna, odvodit třídu a CWindowImpl
zahrnout DECLARE_WND_SUPERCLASS makro. V tomto případě zaregistruje třídu okna, CWndClassInfo
která je založena na existující třídě, ale používá CWindowImpl::WindowProc
. Příklad:
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
Poznámka:
Protože CWndClassInfo
spravuje informace pouze pro jednu třídu okna, každé okno vytvořené prostřednictvím instance CWindowImpl
je založeno na stejné třídě okna.
CWindowImpl
podporuje také podtřídu okna. Metoda SubclassWindow
připojí existující okno k objektu CWindowImpl
a změní proceduru okna na CWindowImpl::WindowProc
. Každá instance CWindowImpl
může podtřídět jiné okno.
Poznámka:
U každého daného CWindowImpl
objektu volejte buď Create
nebo SubclassWindow
. Nevyvolávejte obě metody ve stejném objektu.
Kromě CWindowImpl
, ATL poskytuje CContainedWindow k vytvoření okna, které je obsaženo v jiném objektu.
Destruktor základní třídy (~ CWindowImplRoot
) zajišťuje, že okno je pryč před zničením objektu.
CWindowImpl
je odvozen od CWindowImplBaseT
, který je odvozen z CWindowImplRoot
, který je odvozen z TBase
a CMessageMap.
Další informace na téma | Seznamte se s |
---|---|
Vytváření ovládacích prvků | Kurz ATL |
Použití oken v ATL | ATL – třídy oken |
Průvodce projektem ATL | Vytvoření projektu ATL |
Hierarchie dědičnosti
TBase
CWindowImplRoot
CWindowImplBaseT
CWindowImpl
Požadavky
Hlavička: atlwin.h
CWindowImpl::Create
Vytvoří okno založené na nové třídě okna.
HWND Create(
HWND hWndParent,
_U_RECT rect = NULL,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Parametry
hWndParent
[v] Popisovač okna nadřazeného nebo vlastníka
Rect
[v] Struktura RECT určující pozici okna. Lze RECT
jej předat ukazatelem nebo odkazem.
szWindowName
[v] Určuje název okna. Výchozí hodnota je NULL.
dwStyle
[v] Styl okna Tato hodnota je kombinována se stylem poskytovaným třídou vlastností okna. Výchozí hodnota dává třídě vlastností plnou kontrolu nad stylem. Seznam možných hodnot naleznete v tématu CreateWindow v sadě Windows SDK.
dwExStyle
[v] Rozšířený styl okna. Tato hodnota je kombinována se stylem poskytovaným třídou vlastností okna. Výchozí hodnota dává třídě vlastností plnou kontrolu nad stylem. Seznam možných hodnot naleznete v tématu CreateWindowEx v sadě Windows SDK.
MenuOrID
[v] Pro podřízené okno identifikátor okna. V okně nejvyšší úrovně je popisovač nabídky pro okno. Výchozí hodnota je 0U.
lpCreateParam
[v] Ukazatel na data vytváření oken. Úplný popis najdete v popisu konečného parametru CreateWindowEx.
Návratová hodnota
V případě úspěchu se popisovač nově vytvořeného okna zobrazí. V opačném případě hodnota NULL.
Poznámky
Create
nejprve zaregistruje třídu okna, pokud ještě nebyla zaregistrována. Nově vytvořené okno se automaticky připojí k objektu CWindowImpl
.
Poznámka:
Pokud jste již volali SubclassWindow, nezavolejteCreate
.
Chcete-li použít třídu okna založenou na existující třídě okna, odvodit třídu a CWindowImpl
zahrnout DECLARE_WND_SUPERCLASS makro. Procedura okna existující třídy okna je uložena v m_pfnSuperWindowProc. Další informace najdete v přehledu CWindowImpl .
Poznámka:
Pokud se hodnota 0 použije jako hodnota parametru MenuOrID , musí být zadána jako 0U (výchozí hodnota), aby se zabránilo chybě kompilátoru.
CWindowImpl::D efWindowProc
Volal WindowProc ke zpracování zpráv nezpracovávaných mapou zpráv.
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
LRESULT DefWindowProc();
Parametry
uMsg
[v] Zpráva byla odeslána do okna.
wParam
[v] Další informace specifické pro zprávu
lParam
[v] Další informace specifické pro zprávu
Návratová hodnota
Výsledek zpracování zprávy.
Poznámky
Ve výchozím nastavení DefWindowProc
volání CallWindowProc Win32 funkce odeslat informace o zprávě do okna procedury zadané v m_pfnSuperWindowProc.
Funkce bez parametrů automaticky načte potřebné parametry z aktuální zprávy.
CWindowImpl::GetCurrentMessage
Vrátí aktuální zprávu zabalenou ve struktuře MSG
.
const MSG* GetCurrentMessage();
Návratová hodnota
Aktuální zpráva.
CWindowImpl::GetWindowProc
Vrátí WindowProc
, aktuální okno procedura.
virtual WNDPROC GetWindowProc();
Návratová hodnota
Aktuální postup okna.
Poznámky
Tuto metodu přepište tak, aby se procedura okna nahradila vlastními.
CWindowImpl::GetWndClassInfo
Volal by Create pro přístup k informacím o třídě okna.
static CWndClassInfo& GetWndClassInfo();
Návratová hodnota
Statická instance CWndClassInfo.
Poznámky
Ve výchozím nastavení CWindowImpl
získá tuto metodu prostřednictvím DECLARE_WND_CLASS makra, které určuje novou třídu okna.
Chcete-li nadtřídět existující třídu okna, odvodit třídu a CWindowImpl
zahrnout DECLARE_WND_SUPERCLASS makro přepsání GetWndClassInfo
. Další informace najdete v přehledu CWindowImpl .
Kromě použití DECLARE_WND_CLASS a DECLARE_WND_SUPERCLASS maker můžete přepsat GetWndClassInfo
vlastní implementací.
CWindowImpl::m_pfnSuperWindowProc
V závislosti na okně odkazuje na jeden z následujících postupů okna.
WNDPROC m_pfnSuperWindowProc;
Poznámky
Typ okna | Procedura okna |
---|---|
Okno založené na nové třídě okna zadané prostřednictvím DECLARE_WND_CLASS makra. | DefWindowProc Win32 funkce. |
Okno založené na třídě okna, která upravuje existující třídu určenou prostřednictvím makra DECLARE_WND_SUPERCLASS . | Procedura okna existující třídy okna. |
Podtříděné okno. | Původní postup okna v podtřídě |
CWindowImpl::D efWindowProc odešle informace o zprávě do procedury okna uložené v m_pfnSuperWindowProc
.
CWindowImpl::OnFinalMessage
Volá se po přijetí poslední zprávy (obvykle WM_NCDESTROY).
virtual void OnFinalMessage(HWND hWnd);
Parametry
hWnd
[v] Popisovač okna, který je zničen.
Poznámky
Výchozí implementace OnFinalMessage
nic nedělá, ale tuto funkci můžete přepsat tak, aby zpracovávala čištění před zničením okna. Pokud chcete objekt po zničení okna automaticky odstranit, můžete volat delete this;
tuto funkci.
CWindowImpl::SubclassWindow
Podtřídí okno identifikované hWnd a připojí ho k objektuCWindowImpl
.
BOOL SubclassWindow(HWND hWnd);
Parametry
hWnd
[v] Popisovač okna, které je podtříděné.
Návratová hodnota
TRUE, pokud okno je úspěšně podtříděno; jinak NEPRAVDA.
Poznámky
Podtříděné okno teď používá CWindowImpl::WindowProc. Původní procedura okna je uložena v m_pfnSuperWindowProc.
Poznámka:
Volání nevolejte SubclassWindow
, pokud jste již volali Vytvořit.
CWindowImpl::UnsubclassWindow
Odpojí podtříděné okno od objektu CWindowImpl
a obnoví původní proceduru okna uloženou v m_pfnSuperWindowProc.
HWND UnsubclassWindow();
Návratová hodnota
Popisovač okna dříve podtříděný.
CWindowImpl::WindowProc
Tato statická funkce implementuje proceduru okna.
static LRESULT CALLBACK WindowProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
Parametry
hWnd
[v] Popisovač okna.
uMsg
[v] Zpráva byla odeslána do okna.
wParam
[v] Další informace specifické pro zprávu
lParam
[v] Další informace specifické pro zprávu
Návratová hodnota
Výsledek zpracování zprávy.
Poznámky
WindowProc
používá výchozí mapu zpráv (deklarovanou s BEGIN_MSG_MAP) pro směrování zpráv do příslušných obslužných rutin. V případě potřeby WindowProc
volá DefWindowProc pro další zpracování zpráv. Pokud se konečná zpráva nezpracuje, WindowProc
udělejte toto:
Provede zrušení podtřídy, pokud okno není podtříděno.
Vymaže
m_hWnd
.Volá OnFinalMessage před zničením okna.
Můžete přepsat WindowProc
, abyste zadali jiný mechanismus pro zpracování zpráv.