Uso delle finestre contenute
ATL implementa finestre contenute con CContainedWindowT. Una finestra contenuta rappresenta una finestra che delega i messaggi a un oggetto contenitore anziché gestirli nella propria classe.
Nota
Non è necessario derivare una classe da CContainedWindowT
per usare le finestre contenute.
Con le finestre contenute, è possibile sovraclassere una classe Windows esistente o una sottoclasse di una finestra esistente. Per creare una finestra che superclassi una classe Windows esistente, specificare innanzitutto il nome della classe esistente nel costruttore per l'oggetto CContainedWindowT
. Chiamare CContainedWindowT::Create
quindi . Per sottoclassare una finestra esistente, non è necessario specificare un nome di classe di Windows (passare NULL al costruttore). È sufficiente chiamare il CContainedWindowT::SubclassWindow
metodo con l'handle alla finestra sottoclassata.
In genere si usano finestre contenute come membri dati di una classe contenitore. Il contenitore non deve essere una finestra; tuttavia, deve derivare da CMessageMap.
Una finestra contenuta può usare mappe messaggi alternative per gestire i messaggi. Se sono presenti più finestre contenute, è necessario dichiarare diverse mappe di messaggi alternative, ognuna corrispondente a una finestra separata contenuta.
Esempio
Di seguito è riportato un esempio di una classe contenitore con due finestre contenute:
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()
};
Per altre informazioni sulle finestre contenute, vedere l'esempio SUBEDIT .