Sdílet prostřednictvím


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. CWindowImplobsahuje 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

CMessageMap

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.

Viz také

BEGIN_MSG_MAP
CComControl – třída
Přehled třídy