Файл: 16. Основы программирования пользовательского интерфейса.pdf

Добавлен: 20.10.2018

Просмотров: 672

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

дескриптор меню или подменю, которому принадлежит изменяемый 

элемент; 

 

либо идентификатор элемента, либо его порядковый номер (отсчет – 

с нуля), в зависимости от третьего параметра; 

 

комбинация флагов mf_ByCommandmf_ByPositionmf_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; 


background image

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‟ : … ; 

 

 „к‟, „л‟, „м‟ : … ; 


background image

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. 


background image

Вызов  KillTimer  имеет  2  параметра:  дескриптор  окна  и  номер 

уничтожаемого таймера. 

Каждый  созданный  таймер  через  заданный  интервал  времени 

генерирует  сообщение    wm_Timer.  Это  сообщение  надо  ввести  в  оконную 

функцию  и  реализовать  необходимый  обработчик.  Если  приложение 

одновременно использует несколько таймеров, то при обработке сообщения 

wm_Timer  можно  узнать  номер  таймера,  который  сгенерировал  данное 

сообщение. Этот номер передается в поле  wParam  сообщения  wm_Timer.