Для реализации окно, класс, производный от CWindowImpl. В производном классе объявите сообщение карты и функций обработчиков сообщений. Теперь ваш класс можно использовать тремя различными способами:
Создание окна на основе нового класса Windows
CWindowImpl содержит макрос DECLARE_WND_CLASS , чтобы объявить информацию класса Windows. Этот макрос реализует функцию GetWndClassInfo , которая использует CWndClassInfo для определения информации нового класса Windows. При вызове CWindowImpl::Create , зарегистрировано этот класс Windows и создается новое окно.
Примечаниеnbsp;CWindowImpl передает значение &NULL макрос DECLARE_WND_CLASS , что означает, что ATL будет генерировать имя класса Windows. Чтобы задать собственное имя, передать строку DECLARE_WND_CLASS в вашем CWindowImpl,-производного класса.
Ниже приведен пример класса, который реализует окна на основе нового класса Windows:
класс CMyWindow: государственные CWindowImpllt;CMyWindow >,...
{
общественности:
/ / Дополнительно указать имя нового класса Windows
DECLARE_WND_CLASS("myname") / / Если этот макрос не указан в вашем
/ / класс, ATL будет генерировать имя класса
...
BEGIN_MSG_MAP(CMyWindow)
MESSAGE_HANDLER (WM_PAINT, OnPaint)
END_MSG_MAP()
LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/ / Сделать некоторый код живописи
Возвращает 0;
}
}
Чтобы создать окно, создайте экземпляр CMyWindow и затем вызвать метод Create.
Примечание Для переопределения сведений класса Windows по умолчанию, реализуйте метод GetWndClassInfo в производном классе, задав соответствующие значения членов CWndClassInfo.
Суперкласс существующий класс Windows
Макрос DECLARE_WND_SUPERCLASS позволяет создать окно суперклассов существующую Windows класс. Укажите этот макрос в вашем CWindowImpl-производного класса. Как любое другое окно ATL сообщения обрабатываются схема сообщений.
При использовании DECLARE_WND_SUPERCLASS, будет зарегистрирован новый класс Windows. Этот новый класс будет таким же, как существующий класс задан, но заменяет процедуру окна с CWindowImpl::WindowProc (или с вашей функции, которая переопределяет данный метод).
После представляет собой пример класса что суперклассом для стандартного редактирования класс:
класс CMyEdit: государственные CWindowImpllt;CMyEdit >,...
{
общественности:
/ / «Edit» это имя стандартного класса Windows.
/ / «MyEdit» является имя нового класса Windows
/ / Это будет основываться на класса Edit.
DECLARE_WND_SUPERCLASS ("Правка", «MyEdit»)
...
BEGIN_MSG_MAP(CMyEdit)
MESSAGE_HANDLER (WM_CHAR, OnChar)
END_MSG_MAP()
LRESULT OnChar(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
/ / Сделать некоторые символов код обработки
}
}
Для создания окна редактирования основе суперкласса, создайте экземпляр CMyEdit и затем вызвать метод Create.
Для получения дополнительных сведений о суперкласс, см. Суперкласс процедура окна в Win32 SDK.
Создание подклассов существующих окон
Для подкласса существующему окну производным от CWindowImpl и объявить сообщение карта, как и в двух предыдущих случаях. Отметим, однако, что не указан никакой информации класса Windows, так как вы будете подкласс уже существующему окну.
Вместо того, чтобы предоставить Create, вызовите SubclassWindow и передайте его дескриптор к существующему окну для подкласса. Как только на основе подкласса окно, он будет использовать CWindowImpl::WindowProc (или ваши функция, которая переопределяет этот метод) для прямого сообщения в схеме сообщений. Чтобы отделить подкласс окна от вашего объекта, вызовите UnsubclassWindow. Затем восстановить исходную процедуру окна окна.
Для получения дополнительных сведений о подклассы, см. Подклассы процедура окна в Win32 SDK.