Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предоставляет методы для создания или подкласса окна.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.
Синтаксис
template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>
Параметры
T
Новый класс, производный от CWindowImpl.
TBase
Базовый класс класса. По умолчанию базовый класс — CWindow.
TWinTraits
Класс признаков, определяющий стили окна. Значение по умолчанию — CControlWinTraits.
Участники
Открытые методы
| Имя | Описание |
|---|---|
| CWindowImpl::Create | Создает окно. |
Методы CWindowImplBaseT
| Имя | Описание |
|---|---|
| DefWindowProc | Предоставляет обработку сообщений по умолчанию. |
| GetCurrentMessage | Возвращает текущее сообщение. |
| GetWindowProc | Возвращает текущую процедуру окна. |
| OnFinalMessage | Вызывается после получения последнего сообщения (обычно WM_NCDESTROY). |
| ПодклассWindow | Подклассы окна. |
| UnsubclassWindow | Восстанавливает ранее подклассное окно. |
Статические методы
| Имя | Описание |
|---|---|
| GetWndClassInfo | Возвращает статический экземпляр CWndClassInfo, который управляет сведениями о классе окна. |
| WindowProc | Обрабатывает сообщения, отправленные в окно. |
Элементы данных
| Имя | Описание |
|---|---|
| m_pfnSuperWindowProc | Указывает на исходную процедуру окна класса окна. |
Замечания
Можно использовать CWindowImpl для создания окна или подкласса существующего окна. Процедура CWindowImpl окна использует карту сообщений для направления сообщений соответствующим обработчикам.
CWindowImpl::Create создает окно на основе сведений о классе окон, управляемых CWndClassInfo. CWindowImpl содержит макрос DECLARE_WND_CLASS , то есть CWndClassInfo регистрирует новый класс окна. Если требуется суперкласс существующего класса окна, наследуйте класс из CWindowImpl и включите макрос DECLARE_WND_SUPERCLASS . В этом случае регистрирует класс окна, CWndClassInfo основанный на существующем классе, но используется CWindowImpl::WindowProc. Рассмотрим пример.
class ATL_NO_VTABLE CMyWindow :
OtherInheritedClasses
public CComControl<CMyWindow>
// CComControl derives from CWindowImpl
{
public:
// 1. The NULL parameter means ATL will generate a
// name for the superclass
// 2. The "EDIT" parameter means the superclass is
// based on the standard Windows Edit box
DECLARE_WND_SUPERCLASS(NULL, _T("EDIT"))
// Remainder of class declaration omitted
Примечание.
Так как CWndClassInfo управляет информацией только для одного класса окна, каждое окно, созданное с помощью экземпляра CWindowImpl , основано на одном классе окна.
CWindowImpl также поддерживает подклассы окон. Метод SubclassWindow присоединяет существующее окно к CWindowImpl объекту и изменяет процедуру CWindowImpl::WindowProcокна на . Каждый экземпляр CWindowImpl может подклассить другое окно.
Примечание.
Для любого заданного CWindowImpl объекта вызовите либоSubclassWindowCreate. Не вызывайте оба метода в одном объекте.
Кроме того CWindowImpl, ATL предоставляет CContainedWindow для создания окна, содержащегося в другом объекте.
Деструктор базового класса (~ CWindowImplRoot) гарантирует, что окно исчезнет до уничтожения объекта.
CWindowImplпроизводный от , который является производным от CWindowImplBaseT, который является производным от CWindowImplRootTBase CMessageMap.
| Дополнительные сведения | Смотрите |
|---|---|
| Создание элементов управления | Учебник по ATL |
| Использование окон в ATL | Классы окон ATL |
| Мастер проектов ATL | Создание проекта ATL |
Иерархия наследования
TBase
CWindowImplRoot
CWindowImplBaseT
CWindowImpl
Требования
Заголовок: atlwin.h
CWindowImpl::Create
Создает окно на основе нового класса окна.
HWND Create(
HWND hWndParent,
_U_RECT rect = NULL,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Параметры
hWndParent
[in] Дескриптор родительского или владельца окна.
rect
[in] Структура RECT , указывающая положение окна. Его RECT можно передать по указателю или по ссылке.
szWindowName
[in] Указывает имя окна. Значение по умолчанию — NULL.
dwStyle
[in] Стиль окна. Это значение сочетается со стилем, предоставляемым классом признаков для окна. Значение по умолчанию дает классу признаков полный контроль над стилем. Список возможных значений см. в статье CreateWindow в пакете SDK для Windows.
dwExStyle
[in] Стиль расширенного окна. Это значение сочетается со стилем, предоставляемым классом признаков для окна. Значение по умолчанию дает классу признаков полный контроль над стилем. Список возможных значений см. в статье CreateWindowEx в пакете SDK для Windows.
MenuOrID
[in] Для дочернего окна идентификатор окна. Для окна верхнего уровня дескриптор меню для окна. Значение по умолчанию — 0U.
lpCreateParam
[in] Указатель на данные создания окна. Полное описание см. в описании окончательного параметра CreateWindowEx.
Возвращаемое значение
В случае успешного выполнения дескриптор созданного окна. В противном случае — значение NULL.
Замечания
Create сначала регистрирует класс окна, если он еще не зарегистрирован. Созданное окно автоматически присоединяется к объекту CWindowImpl .
Примечание.
Не вызывайте Create , если вы уже назвали SubclassWindow.
Чтобы использовать класс окна, основанный на существующем классе окна, наследуйте класс и CWindowImpl включите макрос DECLARE_WND_SUPERCLASS . Процедура окна существующего класса окна сохраняется в m_pfnSuperWindowProc. Дополнительные сведения см. в обзоре CWindowImpl .
Примечание.
Если значение 0 используется в качестве значения параметра MenuOrID , его необходимо указать как 0U (значение по умолчанию), чтобы избежать ошибки компилятора.
CWindowImpl::D efWindowProc
Вызывается WindowProc для обработки сообщений, не обработанных картой сообщений.
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
LRESULT DefWindowProc();
Параметры
uMsg
[in] Сообщение, отправленное в окно.
wParam
[in] Дополнительные сведения о сообщении.
lParam
[in] Дополнительные сведения о сообщении.
Возвращаемое значение
Результат обработки сообщения.
Замечания
По умолчанию вызывает функцию DefWindowProc CallWindowProc Win32, чтобы отправить сведения о сообщении в процедуру окна, указанную в m_pfnSuperWindowProc.
Функция без параметров автоматически извлекает необходимые параметры из текущего сообщения.
CWindowImpl::GetCurrentMessage
Возвращает текущее сообщение, упаковаемое в структуру MSG .
const MSG* GetCurrentMessage();
Возвращаемое значение
Текущее сообщение.
CWindowImpl::GetWindowProc
Возвращает WindowProcтекущую процедуру окна.
virtual WNDPROC GetWindowProc();
Возвращаемое значение
Текущая процедура окна.
Замечания
Переопределите этот метод, чтобы заменить процедуру окна собственной.
CWindowImpl::GetWndClassInfo
Вызывается путем создания для доступа к сведениям о классе окна.
static CWndClassInfo& GetWndClassInfo();
Возвращаемое значение
Статический экземпляр CWndClassInfo.
Замечания
По умолчанию CWindowImpl получает этот метод с помощью макроса DECLARE_WND_CLASS , который задает новый класс окна.
Для суперкласса существующего класса окна наследуйте класс и CWindowImpl включите макрос DECLARE_WND_SUPERCLASS для переопределения GetWndClassInfo. Дополнительные сведения см. в обзоре CWindowImpl .
Помимо использования макросов DECLARE_WND_CLASS и DECLARE_WND_SUPERCLASS, можно переопределить GetWndClassInfo собственную реализацию.
CWindowImpl::m_pfnSuperWindowProc
В зависимости от окна указывает на одну из следующих процедур окна.
WNDPROC m_pfnSuperWindowProc;
Замечания
| Тип окна | Процедура окна |
|---|---|
| Окно на основе нового класса окна, указанного с помощью макроса DECLARE_WND_CLASS . | Функция DefWindowProc Win32. |
| Окно, основанное на классе окна, который изменяет существующий класс, указанный с помощью макроса DECLARE_WND_SUPERCLASS . | Процедура окна существующего класса окна. |
| Подклассное окно. | Исходная процедура окна подклассированного окна. |
CWindowImpl::D efWindowProc отправляет сведения о сообщении в процедуру окна, сохраненную в m_pfnSuperWindowProc.
CWindowImpl::OnFinalMessage
Вызывается после получения последнего сообщения (обычно WM_NCDESTROY).
virtual void OnFinalMessage(HWND hWnd);
Параметры
hWnd
[in] Дескриптор уничтоженного окна.
Замечания
Реализация по умолчанию ничего не делает, но эту функцию OnFinalMessage можно переопределить для обработки очистки перед уничтожением окна. Если вы хотите автоматически удалить объект после уничтожения окна, можно вызвать delete this; эту функцию.
CWindowImpl::SubclassWindow
Подклассы окна, определяемого hWnd , и присоединяет его к объекту CWindowImpl .
BOOL SubclassWindow(HWND hWnd);
Параметры
hWnd
[in] Дескриптор подкласса окна.
Возвращаемое значение
ЗНАЧЕНИЕ TRUE, если окно успешно подклассировано; в противном случае — ЗНАЧЕНИЕ FALSE.
Замечания
В подклассовом окне теперь используется CWindowImpl::WindowProc. Исходная процедура окна сохраняется в m_pfnSuperWindowProc.
CWindowImpl::UnsubclassWindow
Отсоединяет подклассное окно от CWindowImpl объекта и восстанавливает исходную процедуру окна, сохраненную в m_pfnSuperWindowProc.
HWND UnsubclassWindow();
Возвращаемое значение
Дескриптор окна, который ранее был подклассирован.
CWindowImpl::WindowProc
Эта статическую функцию реализует процедуру окна.
static LRESULT CALLBACK WindowProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
Параметры
hWnd
[in] Дескриптор окна.
uMsg
[in] Сообщение, отправленное в окно.
wParam
[in] Дополнительные сведения о сообщении.
lParam
[in] Дополнительные сведения о сообщении.
Возвращаемое значение
Результат обработки сообщения.
Замечания
WindowProc использует карту сообщений по умолчанию (объявленную с BEGIN_MSG_MAP) для перенаправления сообщений соответствующим обработчикам. При необходимости WindowProc вызывает DefWindowProc для дополнительной обработки сообщений. Если окончательное сообщение не обрабатывается, WindowProc выполните следующие действия:
Выполняет отмену классификации, если окно было неуправляемо.
Очищает
m_hWnd.Вызывает OnFinalMessage перед уничтожением окна.
Можно переопределить WindowProc для предоставления другого механизма обработки сообщений.