Впровадження вікно з CWindowImpl

Для здійснення вікно, отримати класі з 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.

Subclassing наявному вікні

До підкласу наявному вікні отримати класі з CWindowImpl і оголосити повідомлення карту, як у два попередніх випадках. Зверніть увагу, що не вказано жодної інформації клас Windows, оскільки ви будете підкласу вже наявному вікні.

Замість того, щоб називати Створити, телефонуйте SubclassWindow і передати його маркера існуючі вікна, щоб підкласу. Після того, як subclassed вікна, він буде використовувати CWindowImpl::WindowProc (або функції, який замінить цей метод) прямі повідомлення на карту повідомлення. Щоб від'єднати subclassed вікна від вашого об'єкта, називають UnsubclassWindow. У вікні вихідного вікно процедура буде потім відновлено.

Щоб отримати додаткові відомості про subclassing, перегляньте Subclassing процедуру вікно в Win32 SDK.

Index