Файл: 16. Основы программирования пользовательского интерфейса.pdf
Добавлен: 20.10.2018
Просмотров: 740
Скачиваний: 6
дескриптор меню или подменю, которому принадлежит изменяемый
элемент;
либо идентификатор элемента, либо его порядковый номер (отсчет –
с нуля), в зависимости от третьего параметра;
комбинация флагов mf_ByCommand, mf_ByPosition, mf_String (по
умолчанию используются первый и третий флаги);
повторение второго параметра;
текст элемента.
3. Добавление нового элемента в конец заданного набора –
AppendMenu.
4. Добавление нового элемента перед заданным элементом – InsertMenu
с пятью параметрами, аналогичными функции AppendMenu (добавлен
второй параметр – идентификатор элемента, перед которым должен
быть добавлен новый элемент).
5.
Удаление элемента – DeleteMenu с тремя параметрами: дескриптор
подменю, идентификатор
удаляемого элемента, флаги (описаны выше).
Приложение должно уметь перехватывать сгенерированные системой
сообщения от команд меню и выполнять их обработку. При выборе
пользователем рабочего пункта меню генерируется командное сообщение
wm_Command. В этом сообщении в поле wParam передается идентификатор
данной команды, назначенный ей при создании меню (например, idm_About
или 200). Для обработки данной команды в оконную функцию вводится
обработчик сообщения wm_Command с анализом поля wParam:
case Mess of
wm_Command : case wParam of
100 : …. ;
103 : …. ;
idm_About : …. ;
idm_Exit : ….. ;
end;
end;
Далее кратко рассмотрим использование в приложениях клавиатуры и
мыши. В большинстве случаев события от клавиатуры направляются в окно
активного в данный момент приложения. Основные клавиатурные события:
wm_KeyDown и wm_KeyUp генерируются при нажатии и отпускании
любой клавиши (в том числе и алфавитно-цифровой);
wm_Char генерируется при нажатии только алфавитно-цифровой
клавиши.
При возникновении события wm_Char наибольший интерес для
программы представляет код нажатой клавиши. Этот код передается в поле
wParam данного сообщения. Для обработки сообщения wm_Char надо ввести
его в оконную функцию и проанализировать значение поля wParam.
Аналогично, поле wParam сообщения wm_KeyDown содержит внутренний
код нажатой клавиши. Для удобства работы внутренние коды всех
функциональных
клавиш
заменяются
специальными
текстовыми
константами вида vk_F1, vk_F10, vk_Escape, vk_Return (соответствует
нажатию клавиши Enter). Такие текстовые константы принято называть
виртуальными кодами (vk – virtual key).
Фрагмент оконной функции для обработки функциональных и алфавитно-
цифровых клавиш:
case Message of
wm_KeyDown :
// обработка функциональных клавиш
case wParam of
vk_F1 : … ;
vk_Escape : … ;
end;
wm_Char : // обработка алфавитно-цифровых клавиш
Case wParam of
„a‟ .. „z‟ : … ;
„к‟, „л‟, „м‟ : … ;
end;
end;
Кроме перечисленных, можно использовать события wm_SysKeyDown/
wm_SysKeyUp, которые генерируются при нажатии комбинации клавиш
вместе с управляющими клавишами типа Alt.
В отличие от клавиатурных событий “мышиные” события направляются в
то приложение, над окном которого в данный момент находится курсор
мыши. Наиболее часто используются следующие “мышиные” события:
wm_MouseMove генерируется при перемещении мыши;
wm_LButtonDown и wm_LButtonUp генерируются при нажатии и
отпускании левой кнопки мыши;
wm_RButtonDown и wm_RButtonUp – аналогично для правой кнопки.
При обработке этих событий наибольший интерес представляют
координаты текущего положения мыши. Во всех перечисленных сообщениях
координаты текущего положения передаются в параметре lParam. Этот
параметр имеет размер 4 байта, причем младшие 2 байта несут значение
координаты х, а старшие 2 байта - значение координаты у. Для выделения из
lParam нужных частей х и у можно использовать специальные стандартные
функции LoWord(lParam) и HiWord(lParam).
Таймер – это системный объект, который способен через заданные
интервалы времени генерировать специальные сообщения. Приложение
может создать несколько таймеров с разными интервалами генерации
сообщений. Для использования таймера достаточно двух API-функций:
SetTimer создает новый таймер с заданными параметрами;
KillTimer прекращает работу указанного таймера.
Функция SetTimer принимает 4 параметра:
первый - дескриптор окна, создающего данный таймер;
второй - порядковый номер созданного таймера (идентификатор);
третий - интервал в миллисекундах генерации сообщений;
четвертый обычно задается как nil.
Вызов KillTimer имеет 2 параметра: дескриптор окна и номер
уничтожаемого таймера.
Каждый созданный таймер через заданный интервал времени
генерирует сообщение wm_Timer. Это сообщение надо ввести в оконную
функцию и реализовать необходимый обработчик. Если приложение
одновременно использует несколько таймеров, то при обработке сообщения
wm_Timer можно узнать номер таймера, который сгенерировал данное
сообщение. Этот номер передается в поле wParam сообщения wm_Timer.