Для здійснення вікно, отримати класі з 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 а потім викликати метод Створення.
Примітка Щоб скасувати клас інформацію Windows за промовчанням, реалізувати метод GetWndClassInfo в похідних класів встановивши членів CWndClassInfo відповідні значення.
Superclassing існуючого класу Windows
DECLARE_WND_SUPERCLASS макрос дає змогу створити вікно, що суперкласів існуючі Windows клас. Визначити цей макрос у вашому CWindowImpl-отриманих клас. Як і будь-які інші вікна ATL повідомлення обробляються по мапі повідомлення.
Під час використання DECLARE_WND_SUPERCLASS, зареєстровано новий клас Windows. Це новий клас буде таким же, як існуючого класу ви вкажіть, але буде замінити вікно процедури з CWindowImpl::WindowProc (або з функцією, який замінить цей метод).
Після є прикладом клас що суперкласів стандартного редагування клас:
клас CMyEdit: Громадська CWindowImpllt;CMyEdit >,...
{
готелю:
/ / "Змінити" це ім'я класу стандартний Windows.
/ / "MyEdit" є ім'я новий клас Windows
/ / що базуватиметься на редагування клас.
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)
{
/ / Зробити деякі символ, код обробки
}
}
Щоб створити superclassed вікна редагування, створити екземпляр CMyEdit а потім викликати метод Створення.
Щоб отримати додаткові відомості про superclassing, перегляньте Superclassing процедуру вікно в Win32 SDK.
До підкласу наявному вікні отримати класі з CWindowImpl і оголосити повідомлення карту, як у два попередніх випадках. Зверніть увагу, що не вказано жодної інформації клас Windows, оскільки ви будете підкласу вже наявному вікні.
Замість того, щоб називати Створити, телефонуйте SubclassWindow і передати його маркера існуючі вікна, щоб підкласу. Після того, як subclassed вікна, він буде використовувати CWindowImpl::WindowProc (або функції, який замінить цей метод) прямі повідомлення на карту повідомлення. Щоб від'єднати subclassed вікна від вашого об'єкта, називають UnsubclassWindow. У вікні вихідного вікно процедура буде потім відновлено.
Щоб отримати додаткові відомості про subclassing, перегляньте Subclassing процедуру вікно в Win32 SDK.