Použití oken obsažených v jiném objektu
ATL implementuje obsažená okna s CContainedWindowT. Obsažené okno představuje okno, které deleguje své zprávy na objekt kontejneru namísto jejich zpracování ve své vlastní třídě.
Poznámka:
Abyste mohli používat obsažená okna, nemusíte odvozovat třídu CContainedWindowT
.
S obsaženými okny můžete buď nadtřídět existující třídu Windows, nebo podtřídu existujícího okna. Chcete-li vytvořit okno, které nadtřídí existující třídu Windows, nejprve zadejte název existující třídy v konstruktoru objektu CContainedWindowT
. Pak zavolejte CContainedWindowT::Create
. Pokud chcete podtřídu existujícího okna, nemusíte zadávat název třídy Systému Windows (předejte konstruktoru null). Jednoduše zavolejte metodu CContainedWindowT::SubclassWindow
s popisovačem do podtřídy okna.
Jako datové členy třídy kontejneru obvykle používáte obsažená okna. Kontejner nemusí být okno; však musí být odvozen z CMessageMap.
Obsažené okno může ke zpracování zpráv použít alternativní mapy zpráv. Pokud máte více než jedno okno s obsahem, měli byste deklarovat několik alternativních map zpráv, z nichž každá odpovídá samostatnému obsaženému okně.
Příklad
Následuje příklad třídy kontejneru se dvěma obsaženými okny:
class CMyContainer : public CMessageMap
{
public:
CContainedWindow m_wndEdit;
CContainedWindow m_wndList;
CMyContainer() : m_wndEdit(_T("Edit"), this, 1),
m_wndList(_T("List"), this, 2)
{
}
BEGIN_MSG_MAP(CMyContainer)
ALT_MSG_MAP(1)
// handlers for the Edit window go here
ALT_MSG_MAP(2)
// handlers for the List window go here
END_MSG_MAP()
};
Další informace o obsažených oknech najdete v ukázce SUBEDIT .