Меню
и диалог
При выборе
пользователем какой-либо команды меню система посылает в оконную процедуру сообщение
WM_COMMAND, в коротком (wParam) параметре которого будет спрятан идентификатор
команды. В обработке сообщения WM_COMMAND содержится распаковка короткого параметра
и разветвление в зависимости от идентификатора команды. В ответ на команду About
вызывается диалог, шаблон которого вы можете найти в ресурсах приложения.
Запуск диалога
в модальном режиме обеспечивает API-функция DialogBox, последним параметром
которой является адрес функции About. Он явно приводится к типу DLGPROC (диалоговые
процедуры). Этот тип определен как указатель на функцию обратного вызова (реакцию
на сообщение) с определенным прототипом. Функция About будет вызываться системой
для обработки сообщений, посылаемых уже не главному окну приложения, а окну
диалога. Отметим, что описатели CALLBACK, WINAPi и FAR PASCAL идентичны. Они
появились на разных этапах развития Windows и одновременно используются системой
для обеспечения совместимости со старыми версиями.
Параметры функции
About имеют следующий смысл:
- HWND hDlg — Windows-описатель
окна диалога;
- UINT message — код сообщения;
- WPARAM wParam, LPARAM
IParam — два параметра, сопровождающих сообщение.
Диалоговая
процедура имеет характерную, давно устоявшуюся структуру. Первая ветвь switch-блока
(WM_INITDIALOG) вызывается при открытии диалога, а вторая (WM_COMMAND) — при
нажатии кнопок, расположенных в нем. Вместе с сообщением WM_COMMAND приходят
два параметра, в которых запакована сопровождающая информация. В нашем случае
это идентификатор (ШОК) кнопки ОК, так как другой традиционной кнопки Cancel
(IDCANCEL) просто нет в шаблоне диалога. В Win32 идентификатор элемента управления
спрятан в младших 16 битах wParam, и его приходится распаковывать. Функция EndDialog
закрывает окно диалога.