Электронный учебник:


Курс лекций:


Дополнительно:

Практикум:



Наши хостеры:

преобразователь ржавчины курган

--------------------------

Макросы – распаковщики сообщений

            В файле windowsx.h системы программирования Borland C++ 5.01 определены макросы– распаковщики сообщений, упрощающие обработку сообщений в функции окна. Как уже отмечалось выше, функция окна фактически представляет собой огромный оператор switch, который может занимать не одну сотню строк исходного текста. Написание подобных операторов противоречит принципам структурного программирования и может приводить к трудно обнаруживаемым ошибкам. Второй  серьезной трудностью при программировании функции окна является необходимость обработки параметров сообщений, смысл которых меняется от сообщения к сообщению. Более того, возможно изменение смысла параметров одного и того же сообщения при переходе к новым версиям Windows, как это, например, произошло с параметрами сообщения WM_COMMAND при переходе от WIN16 к WIN32.

20

Легко обойти все эти трудности позволяют распаковщики сообщений. Рассмотрим некоторые из них.

            Макрос HANDLE_MSG определен следующим образом :

            #define HANDLE_MSG(hwnd, message, fn)    \

                         case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))

Вот как в случае сообщения WM_LBUTTONDOWN после обработки препроцессоромбудет выглядеть строка HANDLE_MSG(hwnd, WM_LBUTTONDOWN, Cls_OnLButtonDown) :

            case (WM_LBUTTONDOWN):

      return HANDLE_WM_LBUTTONDOWN((hwnd), (wParam), (lParam), (Cls_OnLButtonDown));

Таким образом, макрос HANDLE_MSG применяется в функции окна и назначает обрабатываемому сообщению  отдельную функцию – обработчик.

            Макросы HANDLE_WM* непосредственно вызывают указанную функцию, после чего производится возврат из функции окна. Вот как, например, определен макрос HANDLE_WM_LBUTTONDOWN:

предыдущаяследующая