Sdílet prostřednictvím


CContainedWindowT – třída

Tato třída implementuje okno obsažené v jiném objektu.

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 TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase

Parametry

TBase
Základní třída nové třídy. Výchozí základní třída je CWindow.

TWinTraits
Třída vlastností, která definuje styly pro vaše okno. Výchozí hodnota je CControlWinTraits.

Poznámka:

CContainedWindow je specializace CContainedWindowT. Pokud chcete změnit základní třídu nebo vlastnosti, použijte CContainedWindowT přímo.

Členové

Veřejné konstruktory

Název Popis
CContainedWindowT::CContainedWindowT Konstruktor Inicializuje datové členy k určení, která mapa zpráv zpracuje zprávy obsaženého okna.

Veřejné metody

Název Popis
CContainedWindowT::Create Vytvoří okno.
CContainedWindowT::D efWindowProc Poskytuje výchozí zpracování zpráv.
CContainedWindowT::GetCurrentMessage Vrátí aktuální zprávu.
CContainedWindowT::RegisterWndSuperclass Zaregistruje třídu okna obsaženého okna.
CContainedWindowT::SubclassWindow Podtřídy okno.
CContainedWindowT::SwitchMessageMap Změní mapu zpráv, která se používá ke zpracování zpráv v obsaženém okně.
CContainedWindowT::UnsubclassWindow Obnoví dříve podtříděné okno.
CContainedWindowT::WindowProc (Statické) Zpracovává zprávy odeslané do obsaženého okna.

Veřejné datové členy

Název Popis
CContainedWindowT::m_dwMsgMapID Určuje, která mapa zpráv bude zpracovávat zprávy obsaženého okna.
CContainedWindowT::m_lpszClassName Určuje název existující třídy okna, na které bude založena nová třída okna.
CContainedWindowT::m_pfnSuperWindowProc Odkazuje na původní proceduru okna třídy okna.
CContainedWindowT::m_pObject Odkazuje na objekt obsahující.

Poznámky

CContainedWindowT implementuje okno obsažené v jiném objektu. CContainedWindowTProcedura okna používá mapu zpráv v objektu obsahujícího k nasměrování zpráv na příslušné obslužné rutiny. Při vytváření objektu CContainedWindowT určíte, které mapování zpráv se má použít.

CContainedWindowT umožňuje vytvořit nové okno pomocí nadtřídy existující třídy okna. Metoda Create nejprve zaregistruje třídu okna, která je založena na existující třídě, ale používá CContainedWindowT::WindowProc. Create pak vytvoří okno založené na této nové třídě okna. Každá instance CContainedWindowT může nadtřídět jinou třídu okna.

CContainedWindowT podporuje také podtřídu okna. Metoda SubclassWindow připojí existující okno k objektu CContainedWindowT a změní proceduru okna na CContainedWindowT::WindowProc. Každá instance CContainedWindowT může podtřídět jiné okno.

Poznámka:

U každého daného CContainedWindowT objektu volejte buď Create nebo SubclassWindow. V jednom objektu byste neměli vyvolat obě metody.

Pokud použijete ovládací prvek Přidat na základě možnosti v Průvodci projektem ATL, průvodce automaticky přidá CContainedWindowT datový člen do třídy implementuje ovládací prvek. Následující příklad ukazuje, jak je deklarováno obsažené okno:

public:
   // Declare a contained window data member
   CContainedWindow m_ctlEdit;

   // Initialize the contained window:
   // 1. Pass "Edit" to specify that the contained 
   //    window should be based on the standard 
   //    Windows Edit box
   // 2. Pass 'this' pointer to specify that CAtlEdit 
   //    contains the message map to be used for the 
   //    contained window's message processing
   // 3. Pass the identifier of the message map. '1'
   //    identifies the alternate message map declared
   //    with ALT_MSG_MAP(1)
   CAtlEdit()
      : m_ctlEdit(_T("Edit"), this, 1)
   {
      m_bWindowOnly = TRUE;
   }

 

// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
   CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()

 

// Define OnCreate handler
// When the containing window receives a WM_CREATE
// message, create the contained window by calling
// CContainedWindow::Create
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
   BOOL& /*bHandled*/)
{
   RECT rc;
   GetWindowRect(&rc);
   rc.right -= rc.left;
   rc.bottom -= rc.top;
   rc.top = rc.left = 0;
   m_ctlEdit.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE | 
      ES_MULTILINE | ES_AUTOVSCROLL);
   return 0;
}
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
Windows Windows a další témata v sadě Windows SDK

Hierarchie dědičnosti

TBase

CContainedWindowT

Požadavky

Hlavička: atlwin.h

CContainedWindowT::CContainedWindowT

Konstruktor inicializuje datové členy.

CContainedWindowT(
    LPTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

CContainedWindowT(
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0)
    CContainedWindowT();

Parametry

lpszClassName
[v] Název existující třídy okna, na které bude založeno obsažené okno.

objekt pObject
[v] Ukazatel na objekt obsahující deklaruje mapu zprávy. Třída tohoto objektu musí být odvozena z CMessageMap.

dwMsgMapID
[v] Identifikuje mapu zpráv, která zpracuje zprávy obsaženého okna. Výchozí hodnota 0 určuje výchozí mapu zpráv deklarovanou pomocí BEGIN_MSG_MAP. Chcete-li použít alternativní mapu zpráv deklarovanou s ALT_MSG_MAP(msgMapID), předejte msgMapID.

Poznámky

Pokud chcete vytvořit nové okno prostřednictvím create, musíte předat název existující třídy okna pro lpszClassName parametr. Příklad najdete v přehledu CContainedWindow .

Existují tři konstruktory:

  • Konstruktor se třemi argumenty je obvykle volána.

  • Konstruktor se dvěma argumenty používá název třídy z TBase::GetWndClassName.

  • Konstruktor bez argumentů se použije, pokud chcete argumenty zadat později. Při pozdějším volání Createje nutné zadat název třídy okna, objekt mapy zpráv a ID mapování zpráv .

Pokud podtřídíte existující okno prostřednictvím PodtřídyWindow, hodnota lpszClassName nebude použita. Proto můžete předat hodnotu NULL pro tento parametr.

CContainedWindowT::Create

Volá RegisterWndSuperclass k registraci třídy okna, která je založena na existující třídě, ale používá CContainedWindowT::WindowProc.

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

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

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

Parametry

lpszClassName
[v] Název existující třídy okna, na které bude založeno obsažené okno.

objekt pObject
[v] Ukazatel na objekt obsahující deklaruje mapu zprávy. Třída tohoto objektu musí být odvozena z CMessageMap.

dwMsgMapID
[v] Identifikuje mapu zpráv, která zpracuje zprávy obsaženého okna. Výchozí hodnota 0 určuje výchozí mapu zpráv deklarovanou pomocí BEGIN_MSG_MAP. Chcete-li použít alternativní mapu zpráv deklarovanou s ALT_MSG_MAP(msgMapID), předejte msgMapID.

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 Výchozí hodnota je WS_CHILD | WS_VISIBLE. Seznam možných hodnot naleznete v tématu CreateWindow v sadě Windows SDK.

dwExStyle
[v] Rozšířený styl okna. Výchozí hodnota je 0, což znamená, že žádný rozšířený styl. 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; v opačném případě null.

Poznámky

Název existující třídy okna je uložen v m_lpszClassName. Create pak vytvoří okno založené na této nové třídě. Nově vytvořené okno se automaticky připojí k objektu CContainedWindowT .

Poznámka:

Pokud jste již volali SubclassWindow, nezavolejteCreate.

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.

CContainedWindowT::D efWindowProc

Volal WindowProc ke zpracování zpráv nezpracovávaných mapou zpráv.

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

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.

CContainedWindowT::GetCurrentMessage

Vrátí aktuální zprávu (m_pCurrentMsg).

const _ATL_MSG* GetCurrentMessage();

Návratová hodnota

Aktuální zpráva zabalená ve struktuře MSG .

CContainedWindowT::m_dwMsgMapID

Obsahuje identifikátor mapy zpráv, který se aktuálně používá pro obsažené okno.

DWORD m_dwMsgMapID;

Poznámky

Tato mapa zpráv musí být deklarována v objektu obsahujícím.

Výchozí mapa zpráv deklarovaná pomocí BEGIN_MSG_MAP je vždy identifikována nulou. Alternativní mapa zpráv deklarovaná pomocí ALT_MSG_MAP(msgMapID) je identifikována msgMapID.

m_dwMsgMapID je nejprve inicializován konstruktorem a lze jej změnit voláním SwitchMessageMap. Příklad najdete v přehledu CContainedWindowT.

CContainedWindowT::m_lpszClassName

Určuje název existující třídy okna.

LPTSTR m_lpszClassName;

Poznámky

Když vytvoříte okno, Create zaregistruje novou třídu okna, která je založena na této existující třídě, ale používá CContainedWindowT::WindowProc.

m_lpszClassName inicializuje konstruktor. Příklad najdete v přehledu CContainedWindowT .

CContainedWindowT::m_pfnSuperWindowProc

Pokud je obsažené okno podtříděno, m_pfnSuperWindowProc odkazuje na původní proceduru okna třídy okna.

WNDPROC m_pfnSuperWindowProc;

Poznámky

Pokud je obsažené okno nadtříděné, což znamená, že je založeno na třídě okna, která upravuje existující třídu, m_pfnSuperWindowProc odkazuje na proceduru okna existující třídy okna.

DefWindowProc metoda odesílá informace o zprávě do procedury okna uložené v m_pfnSuperWindowProc.

CContainedWindowT::m_pObject

Odkazuje na objekt obsahující CContainedWindowT objekt.

CMessageMap* m_pObject;

Poznámky

Tento kontejner, jehož třída musí odvodit z CMessageMap, deklaruje mapu zpráv používanou obsaženým oknem.

m_pObject inicializuje konstruktor. Příklad najdete v přehledu CContainedWindowT .

CContainedWindowT::RegisterWndSuperclass

Volal by Create k registraci třídy okna obsaženého okna.

ATOM RegisterWndSuperClass();

Návratová hodnota

V případě úspěchu atom, který jednoznačně identifikuje třídu okna, která je registrována; jinak, nula.

Poznámky

Tato třída okna je založena na existující třídě, ale používá CContainedWindowT::WindowProc. Název a procedura okna existující třídy okna jsou uloženy v m_lpszClassName a m_pfnSuperWindowProc v uvedeném pořadí.

CContainedWindowT::SubclassWindow

Podtřídí okno identifikované hWnd a připojí ho k objektuCContainedWindowT.

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á CContainedWindowT::WindowProc. Původní procedura okna je uložena v m_pfnSuperWindowProc.

Poznámka:

Volání nevolejte SubclassWindow , pokud jste již volali Vytvořit.

CContainedWindowT::SwitchMessageMap

Změny mapy zpráv, které se použijí ke zpracování zpráv obsažených oken.

void SwitchMessageMap(DWORD dwMsgMapID);

Parametry

dwMsgMapID
[v] Identifikátor mapy zpráv. Pokud chcete použít výchozí mapu zpráv deklarovanou s BEGIN_MSG_MAP, předejte nulu. Chcete-li použít alternativní mapu zpráv deklarovanou s ALT_MSG_MAP(msgMapID), předejte msgMapID.

Poznámky

Mapa zpráv musí být definována v objektu obsahujícím.

Nejprve zadáte identifikátor mapování zpráv v konstruktoru.

CContainedWindowT::UnsubclassWindow

Odpojí podtříděné okno od objektu CContainedWindowT a obnoví původní proceduru okna uloženou v m_pfnSuperWindowProc.

HWND UnsubclassWindow(BOOL bForce = FALSE);

Parametry

bForce
[v] Pokud chcete vynutit obnovení původní procedury okna i v případě, že procedura okna pro tento CContainedWindowT objekt není aktuálně aktivní. Pokud je bForce nastavena na NEPRAVDA a procedura okna pro tento CContainedWindowT objekt není aktuálně aktivní, původní procedura okna nebude obnovena.

Návratová hodnota

Popisovač okna dříve podtříděný. Pokud je bForce nastavena na FALSE a procedura okna pro tento CContainedWindowT objekt není aktuálně aktivní, vrátí hodnotu NULL.

Poznámky

Tuto metodu použijte pouze v případě, že chcete obnovit původní proceduru okna před zničením okna. V opačném případě windowProc to automaticky provede, když je okno zničeno.

CContainedWindowT::WindowProc

Tato statická metoda 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 směruje zprávy na mapu zpráv identifikovanou m_dwMsgMapID. V případě potřeby WindowProc volá DefWindowProc pro další zpracování zpráv.

Viz také

CWindow – třída
CWindowImpl – třída
CMessageMap – třída
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Přehled třídy