Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 41

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 35 36 37 38 39 40 < 41 > 42 43 44 45 46 47 .. 173 >> Следующая

Таблица. 18.6. Виртуальные коды клавиш, которые не генерируют сообщения им_снак
Значение (десятичное) Обозначение константы Клавиша
12 vk_clear Цифра 5 на дополнительной клавиа-
туре (Num Lock выключена)
16 VK_shift Shift
17 vk control Ctrl
19 vk pause Pause

Окончание табл. 18.6.
Значение Обозначение константы Клавиша
(десятичное)
20 VK CAPITAL Caps Lock
33 VK_PRIOR PgUp
34 VK_NEXT PgDn
35 VK_END End
36 VK_HOME Home
37 VK LEFT <-
38 VK_UP T
39 VK_RIGHT -»
40 VK_DOWN 4.
45 VK INSERT Ins
46 VK_DELETE Delete
112 VK_F1 Fl
113 VK_F2 F2
114 VK_F3 F3
115 VK_F4 F4
116 VK_F5 F5
117 VK_F6 F6
118 VK_F7 F7
119 VK_F8 F8
120 VK_F9 F9
121 VK_F10 F10
122 VK_F11 Fll
123 VK_F12 F12
144 VK NUMLOCK Num Lock
145 VK_SCROLL Scroll Lock
Если нажать клавишу Home или End, то функция OnKeyDown вызовет функцию Win32 API : GetKeyState, чтобы определить, была ли нажата клавиша Ctrl одновременно с Ноте или End.
case VK_HOME: // клавиша Ноте
if (::GetKeyState (VK_CONTROL) & 0x8000) {
// Если клавиша Ctrl была нажата одновременно с клавишей Ноте,
// то обрабатывается комбинация клавиш Ctrl + Home
1
else
{
// Если клавиша Ctrl не была нажата, то обрабатывается // клавиша Ноте
При вызове функции : : GetKeyState передается виртуальный код проверяемой клавиши (табл. 18.6). Функция : : GetKeyState возвращает значение, указывающее состояние определенной клавиши при генерации сообщения wm_Keydown. Если клавиша нажата, то старший бит значения, возвращаемого функцией : -.GetKeyState, устанавливается в 1 (функция : : GetKeyState возвращает результат типа SHORT, являющийся 16-битовым значением). Проверка значения старшего бита организована в следующем примере.
if (::GetKeyState (VK_SHIFT) & 0x8000) //то была нажата клавиша SHIFT
Кроме того, если клавиша переключалась во время генерации сообщения WM_KEYDOWN, то бит младшего разряда значения результата функции : : GetKeyState устанавливается в 1. Клавиши Caps Lock, Num Lock и Scroll Lock переключаются во включенное состояние, и на клавиатуре зажигается индикатор (если он имеется). Следующий пример определяет переключение клавиши Caps Lock.
if (::GetKeyState (VK_CAPITAL) & 0x0001) // то переключается клавиша Caps Lock
Обратите внимание: функция ::GetKeyState указывает, была ли клавиша нажата или переключена при генерации сообщения wm_ ке yd own. Она не возвращает текущее состояние клавиши, которое могло измениться за время обработки сообщения. Текущее состояние клавиши можно получить, вызывая функцию Win32 API ::GetAsyncKeyState.
Функция OnKeyDown обрабатывает каждое нажатие клавиши, передавая одно из тех сообщений, которые обычно передаются полосой прокрутки, когда на ней выполняется некоторое действие мышью. Сообщение передается окну представления вызовом функции cWnd: : SendMessage. Класс CScrollView предоставляет обработчики для каждого из сообщений, которые прокручивают окно и изменяют положение бегунка полосы прокрутки так же, как при щелчке на полосе прокрутки.
Например, при нажатии клавиши "4-", функция OnKeyDown передает сообщение, идентичное передаваемому вертикальной полосой прокрутки при щелчке на кнопке под ее бегунком. Это сообщение имеет идентификатор wm_vscroll, отображающий его связь с вертикальной полосой прокрутки. Посылается оно с кодом SB_linedown, отображающим специальное действие полосы прокрутки.
case VK_DOWN: // стрелка вниз
if (ClientRect.bottom < DocSize.cy)
SendMessage (WM_VSCROLL, sb_LINEDOWN); break;
Когда обработчик сообщения WM_VSCROLL, предоставляемый классом CScrollView, обрабатывает это сообщение, он прокручивает текст на одну строку вниз.
Каждое сообщение полосы прокрутки сопровождается кодами с идентификаторами SB_, указывающими, что произошло специальное действие прокрутки. На рис. 18.7 показано, какие коды передаются, если щелкнуть на полосе прокрутки.
J
ИИ в
я
J
SB_LINELEFT SB_PAGERIGHT
SB PAGELEFT SB LINERIGHT
SB LINEUP
SB PAGEUP
SB PAGEDOWN
SB LINEDOWN
Рис. 18.7. Коды зв_, передаваемые с сообщениями полосы прокрутки при щелчке на ней
В табл. 18.7 приведен список клавиш, нажатие на которые обрабатывается функцией ОпКеуОомп. Указаны действия, выполняемые после нажатия клавиши, и сообщения полосы прокрутки, передаваемые при этом функцией ОпКеуОс^п окну представления. Термин страница относится к прокручиваемому расстоянию, равному '/ю размера документа в направлении прокрутки, термин строка — к расстоянию, равному '/ю размера страницы. Как упоминалось в гл. 13, эти расстояния можно изменять, вызывая функцию сЭсгоИЛЛе!*:: SetScrollSizes.
Таблица. 18.7. Нажатия клавиш прокрутки, обрабатываемые функцией onKeyDown программы TextDemo
Клавиша Прокрутка Сообщение, передаваемое
окну представления
<- На один символ влево WM_ _HSCROLL, SB_ _LINEUP
-> На один символ вправо WM_ _HSCROLL, SB_ _LINEDOWN
т На одну строку вверх WM_ _HSCROLL, SB_ _LINEUP
і На одну строку вниз WM _HSCROLL, SB_ _LINEDOWN
Home На первую позицию строки WM_ _HSCROLL, SB_ TOP
Ctrl+Home На первую позицию первой строки WM_ _HSCROLL, SB_ TOP
Предыдущая << 1 .. 35 36 37 38 39 40 < 41 > 42 43 44 45 46 47 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100