Поделиться через


Использование контейнеризированных окон

Примечание.

Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

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 .

См. также

Классы окон