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. CContainedWindowT
Procedura 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í
Create
je 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