Использование размещенных окон
ATL реализует содержащиеся окна с CContainedWindowT. Автономное окно представляет окно, которое делегирует свои сообщения объекту контейнера, а не обрабатывает их в собственном классе.
Примечание.
Для использования содержащихся окон не требуется наследовать класс CContainedWindowT
.
С помощью содержащихся окон можно либо суперкласс существующего класса Windows, либо подкласс существующего окна. Чтобы создать окно, которое суперклассирует существующий класс Windows, сначала укажите существующее имя класса в конструкторе CContainedWindowT
объекта. Затем вызовите CContainedWindowT::Create
. Чтобы подкласс существующего окна, не нужно указывать имя класса Windows (передайте NULL в конструктор). Просто вызовите CContainedWindowT::SubclassWindow
метод с дескриптором подкласса окна.
Обычно в качестве элементов данных класса контейнеров используются содержащиеся окна. Контейнер не должен быть окном; однако он должен быть производным от CMessageMap.
Автономное окно может использовать альтернативные карты сообщений для обработки своих сообщений. Если у вас несколько содержащихся окон, следует объявить несколько альтернативных карт сообщений, каждое из которых соответствует отдельному автономному окну.
Пример
Ниже приведен пример класса контейнера с двумя содержащимися окнами:
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()
};
Дополнительные сведения о содержащихся окнах см. в примере SUBEDIT .