Класс CContainedWindowT
Этот класс реализует окно, содержащееся в другом объекте.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.
Синтаксис
template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase
Параметры
TBase
Базовый класс нового класса. Базовый класс по умолчанию.CWindow
TWinTraits
Класс признаков, определяющий стили окна. Значение по умолчанию — CControlWinTraits
.
Примечание.
CContainedWindow является специализацией CContainedWindowT
. Если вы хотите изменить базовый класс или признаки, используйте CContainedWindowT
напрямую.
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CContainedWindowT::CContainedWindowT | Конструктор. Инициализирует элементы данных, чтобы указать, какая карта сообщений будет обрабатывать сообщения автономного окна. |
Открытые методы
Имя | Описание |
---|---|
CContainedWindowT::Create | Создает окно. |
CContainedWindowT::D efWindowProc | Предоставляет обработку сообщений по умолчанию. |
CContainedWindowT::GetCurrentMessage | Возвращает текущее сообщение. |
CContainedWindowT::RegisterWndSuperclass | Регистрирует класс окна в автономном окне. |
CContainedWindowT::SubclassWindow | Подклассы окна. |
CContainedWindowT::SwitchMessageMap | Изменяет карту сообщений, используемую для обработки сообщений в автономном окне. |
CContainedWindowT::UnsubclassWindow | Восстанавливает ранее подклассное окно. |
CContainedWindowT::WindowProc | (статический) Обрабатывает сообщения, отправленные в автономное окно. |
Открытые члены данных
Имя | Описание |
---|---|
CContainedWindowT::m_dwMsgMapID | Определяет, какая карта сообщений будет обрабатывать сообщения, содержащиеся в окне. |
CContainedWindowT::m_lpszClassName | Указывает имя существующего класса окна, на котором будет основан новый класс окна. |
CContainedWindowT::m_pfnSuperWindowProc | Указывает на исходную процедуру окна класса окна. |
CContainedWindowT::m_pObject | Указывает на содержащий объект. |
Замечания
CContainedWindowT
реализует окно, содержащееся в другом объекте. CContainedWindowT
Процедура окна использует карту сообщений в содержащий объект для направления сообщений соответствующим обработчикам. При создании CContainedWindowT
объекта необходимо указать, какую карту сообщений следует использовать.
CContainedWindowT
позволяет создать новое окно путем суперкласса существующего класса окна. Метод Create
сначала регистрирует класс окна, основанный на существующем классе, но используется CContainedWindowT::WindowProc
. Create
затем создает окно на основе этого нового класса окна. Каждый экземпляр CContainedWindowT
может суперклассового класса окна.
CContainedWindowT
также поддерживает подклассы окон. Метод SubclassWindow
присоединяет существующее окно к CContainedWindowT
объекту и изменяет процедуру CContainedWindowT::WindowProc
окна на . Каждый экземпляр CContainedWindowT
может подклассить другое окно.
Примечание.
Для любого заданного CContainedWindowT
объекта вызовите либоSubclassWindow
Create
. В одном объекте не следует вызывать оба метода.
При использовании элемента управления Add на основе параметра в мастере проекта ATL мастер автоматически добавит CContainedWindowT
член данных в класс, реализующий элемент управления. В следующем примере показано, как объявлено автономное окно:
public:
// Declare a contained window data member
CContainedWindow m_ctlEdit;
// Initialize the contained window:
// 1. Pass "Edit" to specify that the contained
// window should be based on the standard
// Windows Edit box
// 2. Pass 'this' pointer to specify that CAtlEdit
// contains the message map to be used for the
// contained window's message processing
// 3. Pass the identifier of the message map. '1'
// identifies the alternate message map declared
// with ALT_MSG_MAP(1)
CAtlEdit()
: m_ctlEdit(_T("Edit"), this, 1)
{
m_bWindowOnly = TRUE;
}
// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
// Define OnCreate handler
// When the containing window receives a WM_CREATE
// message, create the contained window by calling
// CContainedWindow::Create
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
RECT rc;
GetWindowRect(&rc);
rc.right -= rc.left;
rc.bottom -= rc.top;
rc.top = rc.left = 0;
m_ctlEdit.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE |
ES_MULTILINE | ES_AUTOVSCROLL);
return 0;
}
Дополнительные сведения | Смотрите |
---|---|
Создание элементов управления | Учебник по ATL |
Использование окон в ATL | Классы окон ATL |
Мастер проектов ATL | Создание проекта ATL |
Windows | Windows и последующие разделы пакета SDK для Windows |
Иерархия наследования
TBase
CContainedWindowT
Требования
Заголовок: atlwin.h
CContainedWindowT::CContainedWindowT
Конструктор инициализирует элементы данных.
CContainedWindowT(
LPTSTR lpszClassName,
CMessageMap* pObject,
DWORD dwMsgMapID = 0);
CContainedWindowT(
CMessageMap* pObject,
DWORD dwMsgMapID = 0)
CContainedWindowT();
Параметры
lpszClassName
[in] Имя существующего класса окна, на котором будет основано содержащееся окно.
pObject
[in] Указатель на содержащий объект, объявляющий карту сообщений. Класс этого объекта должен быть производным от CMessageMap.
dwMsgMapID
[in] Определяет карту сообщений, которая будет обрабатывать сообщения в автономном окне. Значение по умолчанию , 0, указывает карту сообщений по умолчанию, объявленную с помощью BEGIN_MSG_MAP. Чтобы использовать альтернативную карту сообщений, объявленную с ALT_MSG_MAP(msgMapID),передайте msgMapID
.
Замечания
Если вы хотите создать новое окно с помощью create, необходимо передать имя существующего класса окна для параметра lpszClassName . Пример см. в обзоре CContainedWindow .
Существует три конструктора:
Конструктор с тремя аргументами обычно называется.
Конструктор с двумя аргументами использует имя класса из
TBase::GetWndClassName
.Конструктор без аргументов используется, если вы хотите указать аргументы позже. При последующем вызове
Create
необходимо указать имя класса окна, объект карты сообщений и идентификатор карты сообщения.
Если вы подклассуете существующее окно через SubclassWindow, значение lpszClassName не будет использоваться. Таким образом, можно передать значение NULL для этого параметра.
CContainedWindowT::Create
Вызывает RegisterWndSuperclass для регистрации класса окон, основанного на существующем классе, но использует CContainedWindowT::WindowProc.
HWND Create(
HWND hWndParent,
_U_RECT rect,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
HWND Create(
CMessageMap* pObject,
DWORD dwMsgMapID,
HWND hWndParent,
_U_RECT rect,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
HWND Create(
LPCTSTR lpszClassName,
CMessageMap* pObject,
DWORD dwMsgMapID,
HWND hWndParent,
_U_RECT rect,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Параметры
lpszClassName
[in] Имя существующего класса окна, на котором будет основано содержащееся окно.
pObject
[in] Указатель на содержащий объект, объявляющий карту сообщений. Класс этого объекта должен быть производным от CMessageMap.
dwMsgMapID
[in] Определяет карту сообщений, которая будет обрабатывать сообщения в автономном окне. Значение по умолчанию , 0, указывает карту сообщений по умолчанию, объявленную с помощью BEGIN_MSG_MAP. Чтобы использовать альтернативную карту сообщений, объявленную с ALT_MSG_MAP(msgMapID),передайте msgMapID
.
hWndParent
[in] Дескриптор родительского или владельца окна.
rect
[in] Структура RECT , указывающая положение окна. Его RECT
можно передать по указателю или по ссылке.
szWindowName
[in] Указывает имя окна. Значение по умолчанию — NULL.
dwStyle
[in] Стиль окна. Значение по умолчанию — WS_CHILD | WS_VISIBLE
. Список возможных значений см. в статье CreateWindow в пакете SDK для Windows.
dwExStyle
[in] Стиль расширенного окна. Значение по умолчанию равно 0, что означает отсутствие расширенного стиля. Список возможных значений см. в статье CreateWindowEx в пакете SDK для Windows.
MenuOrID
[in] Для дочернего окна идентификатор окна. Для окна верхнего уровня дескриптор меню для окна. Значение по умолчанию — 0U.
lpCreateParam
[in] Указатель на данные создания окна. Полное описание см. в описании окончательного параметра CreateWindowEx.
Возвращаемое значение
В случае успешного выполнения дескриптор в только что созданное окно; в противном случае значение NULL.
Замечания
Существующее имя класса окна сохраняется в m_lpszClassName. Create
затем создает окно на основе этого нового класса. Созданное окно автоматически присоединяется к объекту CContainedWindowT
.
Примечание.
Не вызывайте Create
, если вы уже назвали SubclassWindow.
Примечание.
Если значение 0 используется в качестве значения параметра MenuOrID , его необходимо указать как 0U (значение по умолчанию), чтобы избежать ошибки компилятора.
CContainedWindowT::D efWindowProc
Вызывается WindowProc для обработки сообщений, не обработанных картой сообщений.
LRESULT DefWindowProc()
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
Параметры
uMsg
[in] Сообщение, отправленное в окно.
wParam
[in] Дополнительные сведения о сообщении.
lParam
[in] Дополнительные сведения о сообщении.
Возвращаемое значение
Результат обработки сообщения.
Замечания
По умолчанию вызывает функцию DefWindowProc
CallWindowProc Win32, чтобы отправить сведения о сообщении в процедуру окна, указанную в m_pfnSuperWindowProc.
CContainedWindowT::GetCurrentMessage
Возвращает текущее сообщение (m_pCurrentMsg
).
const _ATL_MSG* GetCurrentMessage();
Возвращаемое значение
Текущее сообщение, упаковаемое в структуру MSG
.
CContainedWindowT::m_dwMsgMapID
Содержит идентификатор карты сообщений, используемой в настоящее время для автономного окна.
DWORD m_dwMsgMapID;
Замечания
Эта карта сообщений должна быть объявлена в содержаемом объекте.
Карта сообщений по умолчанию, объявленная с BEGIN_MSG_MAP, всегда определяется нулем. Альтернативная карта сообщений, объявленная с ALT_MSG_MAP(msgMapID), определяется по msgMapID
.
m_dwMsgMapID
сначала инициализирован конструктором и может быть изменен путем вызова SwitchMessageMap. Пример см. в обзоре CContainedWindowT.
CContainedWindowT::m_lpszClassName
Указывает имя существующего класса окна.
LPTSTR m_lpszClassName;
Замечания
При создании окна создание регистрирует новый класс окна, основанный на этом существующем классе, но использует CContainedWindowT::WindowProc.
m_lpszClassName
инициализируется конструктором. Пример см. в обзоре CContainedWindowT .
CContainedWindowT::m_pfnSuperWindowProc
Если в автономном окне подклассы, m_pfnSuperWindowProc
указывает на исходную процедуру окна класса окна.
WNDPROC m_pfnSuperWindowProc;
Замечания
Если автономное окно суперклассировано, то есть он основан на классе окна, который изменяет существующий класс, m_pfnSuperWindowProc
указывает на процедуру окна существующего класса окна.
Метод DefWindowProc отправляет сведения о сообщении в процедуру окна, сохраненную в m_pfnSuperWindowProc
.
CContainedWindowT::m_pObject
Указывает на объект, CContainedWindowT
содержащий объект.
CMessageMap* m_pObject;
Замечания
Этот контейнер, класс которого должен быть производным от CMessageMap, объявляет карту сообщений, используемую в автономном окне.
m_pObject
инициализируется конструктором. Пример см. в обзоре CContainedWindowT .
CContainedWindowT::RegisterWndSuperclass
Вызывается путем создания для регистрации класса окна в автономном окне.
ATOM RegisterWndSuperClass();
Возвращаемое значение
При успешном выполнении атом, который однозначно идентифицирует зарегистрированный класс окна; в противном случае — ноль.
Замечания
Этот класс окна основан на существующем классе, но использует CContainedWindowT::WindowProc. Имя и процедура окна существующего класса окна сохраняются в m_lpszClassName и m_pfnSuperWindowProc соответственно.
CContainedWindowT::SubclassWindow
Подклассы окна, определяемого hWnd , и присоединяет его к объекту CContainedWindowT
.
BOOL SubclassWindow(HWND hWnd);
Параметры
hWnd
[in] Дескриптор подкласса окна.
Возвращаемое значение
ЗНАЧЕНИЕ TRUE, если окно успешно подклассировано; в противном случае — ЗНАЧЕНИЕ FALSE.
Замечания
В подклассном окне теперь используется CContainedWindowT::WindowProc. Исходная процедура окна сохраняется в m_pfnSuperWindowProc.
CContainedWindowT::SwitchMessageMap
Изменения карты сообщений, которые будут использоваться для обработки сообщений в автономном окне.
void SwitchMessageMap(DWORD dwMsgMapID);
Параметры
dwMsgMapID
[in] Идентификатор карты сообщений. Чтобы использовать карту сообщений по умолчанию, объявленную с BEGIN_MSG_MAP, передайте ноль. Чтобы использовать альтернативную карту сообщений, объявленную с ALT_MSG_MAP(msgMapID),передайте msgMapID
.
Замечания
Карта сообщений должна быть определена в содержаемом объекте.
Изначально в конструкторе указывается идентификатор карты сообщений.
CContainedWindowT::UnsubclassWindow
Отсоединяет подклассное окно от CContainedWindowT
объекта и восстанавливает исходную процедуру окна, сохраненную в m_pfnSuperWindowProc.
HWND UnsubclassWindow(BOOL bForce = FALSE);
Параметры
bForce
[in] Задайте значение TRUE, чтобы принудительно восстановить исходную процедуру окна, даже если процедура окна для этого CContainedWindowT
объекта в настоящее время не активна. Если для этого объекта задано значение FALSE, а процедура окна для этого CContainedWindowT
объекта в настоящее время не активна, исходная процедура окна не будет восстановлена.
Возвращаемое значение
Дескриптор окна, который ранее был подклассирован. Если для этого объекта задано значение FALSE, а процедура окна для этого CContainedWindowT
объекта сейчас не активна, возвращает значение NULL.
Замечания
Используйте этот метод, только если вы хотите восстановить исходную процедуру окна перед уничтожением окна. В противном случае ОкноProc будет автоматически выполнять это при уничтожении окна.
CContainedWindowT::WindowProc
Этот статический метод реализует процедуру окна.
static LRESULT CALLBACK WindowProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
Параметры
hWnd
[in] Дескриптор окна.
uMsg
[in] Сообщение, отправленное в окно.
wParam
[in] Дополнительные сведения о сообщении.
lParam
[in] Дополнительные сведения о сообщении.
Возвращаемое значение
Результат обработки сообщения.
Замечания
WindowProc
направляет сообщения на карту сообщений, определяемую m_dwMsgMapID. При необходимости WindowProc
вызывает DefWindowProc для дополнительной обработки сообщений.
См. также
Класс CWindow
Класс CWindowImpl
Класс CMessageMap
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Общие сведения о классе