Używanie okien zawartych
AtL implementuje zawarte okna z CContainedWindowT. Zawarte okno reprezentuje okno, które deleguje komunikaty do obiektu kontenera zamiast obsługiwać je we własnej klasie.
Uwaga
Nie trzeba pobierać klasy z CContainedWindowT
klasy w celu używania zawartych okien.
W przypadku zawartych okien można zastąpić istniejącą klasę systemu Windows lub podklasę istniejącego okna. Aby utworzyć okno, które klasy superklasuje istniejącą klasę systemu Windows, najpierw określ istniejącą nazwę klasy w konstruktorze CContainedWindowT
dla obiektu. Następnie wywołaj metodę CContainedWindowT::Create
. Aby podklasować istniejące okno, nie trzeba określać nazwy klasy systemu Windows (przekazać wartość NULL do konstruktora). Po prostu wywołaj metodę CContainedWindowT::SubclassWindow
za pomocą uchwytu do podklasy okna.
Zazwyczaj używane są zawarte okna jako składowe danych klasy kontenera. Kontener nie musi być oknem; jednak musi pochodzić z CMessageMap.
Zawarte okno może używać alternatywnych map komunikatów do obsługi komunikatów. Jeśli masz więcej niż jedno zawarte okno, należy zadeklarować kilka alternatywnych map komunikatów, z których każda odpowiada oddzielnemu zawartemu oknie.
Przykład
Oto przykład klasy kontenera z dwoma zawartymi oknami:
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()
};
Aby uzyskać więcej informacji na temat zawartych okien, zobacz przykład SUBEDIT .