Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПС- читать.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
142.34 Кб
Скачать

7. Типы клавиатурных сообщений. Особенности обработки. (трпс)

Сообщения, которые приложение получает от Windows о событиях, относящихся к клавиатуре, различают на аппаратные и символьные, т.к. клавиатуру можно рассматривать как набор клавиш, а во-вторых клавиатура является устройством ввода, генерирующим отображающие символы.

Когда пользователь нажимает клавишу, Windows помещает в очередь окна, имеющего фокус ввода, либо сообщение WM_KEYDOWN, либо сообщение WM_SYSKEYDOWN. Когда же клавиша отпускается, Windows посылает в очередь либо сообщение WM_KEYUP, либо сообщение WM_SYSKEYUP. Cообщения WM_KEYDOWN и WM_KEYUP – это несистемные аппаратные сообщения, Обычно сообщения о нажатии и отпускании появляются парами, но если пользователь оставит клавишу нажатой тогда Windows посылает оконной функции серию сообщений WM_KEYDOWN или WM_SYSKEYDOWN и только одно сообщение WM_KEYUP или WM_SYSKEYUP, когда клавиша всё таки окажется отпущенной. Аппаратные сообщения клавиатуры являются асинхронными сообщениями, и становятся в очередь сообщений. WM_SYSKEYUP и WM_SYSKEYDOWN – системные аппаратные сообщения более важны для Windows, чем для приложений. Эти сообщения генерируются при нажатии клавиш в сочетании с клавишей <Alt>.. Программы обычно игнорируют системные аппаратные сообщения и передают их в функцию DefWindowProc(). Для того, чтобы сообщения клавиатуры появились в очереди сообщений окна нужно дополнить цикл обработки сообщений приложения функцией TranslateMessage(). Данная функция преобразует аппаратные сообщения клавиатуры в символьные сообщения в соответствии с состоянием драйвера клавиатуры, а также положением управляющих клавиш <Shift> и <CapsLock>. Именно благодаря TranslateMessage(), в очереди сообщений появляются символьные сообщения. Символьное сообщение всегда будет следующим, после сообщения о нажатии клавиши, которое функция GetMessage() извлечет из очереди.

Существует 4 типа символьных сообщений – WM_CHAR и WM_DEADCHAR относятся к несистемным и приходят вслед за WM_KEYDOWN. Сообщения WM_SYSCHAR и WM_SYSDEADCHAR являются системными и вызваны появлением сообщения WM_SYSKEYDOWN. Для сообщения WM_CHAR параметр wParam содержит ANSI-код нажатой клавиши. lParam – содержит число повторов, генерируемых при удержании клавиши в нажатом состоянии.

Некоторые приложения могут иметь больше одного окна, и клавиатура должна разделяться между этими окнами в рамках одного и того же приложения. Когда на клавиатуре нажата клавиша, только одна оконная процедура может получить сообщение об этом. Окно, которое в настоящее время получает все клавиатурные сообщения, именуется окном, имеющим фокус ввода. Концепция фокуса ввода тесно связана с концепцией активного окна. Окно, имеющее фокус ввода – это либо активное окно, либо дочернее окно активного окна

8. Типы сообщений от манипулятора мышь. Особенности обработки. (трпс)

Сообщения делятся на: сообщения в клиентской части окна и сообщения вне клиентской области окна.

  1. Сообщения клиентской части окна (например WM_LBUTTONDOWN) формируются когда события происходят над клиентской частью окна. Параметр lParam этих сообщений означает координаты курсора относительно клиентской части окна. Параметр wParam содержит флаги, определяющие состояние кнопок мыши и клавиш CTRL и SHIFT.

  2. Сообщения неклиентской части окна формируются когда события происходят над окном вне клиентской его части. Windows генерирует эти сообщения в основном для её собственного использования. Названия сообщений такие же, как и в клиентской части, но добавляются ещё буквы NC (например WM_NCLBUTTONDOWN). Параметр lParam этих сообщений означает координаты курсора относительно экрана. Параметр wParam содержит информацию о том, в какой именно области неклиентской части окна сформировалось данное сообщение.

WM_MOUSEACTIVATE сообщение посылается, когда курсор находится в бездействующем окне, и пользователь нажимает кнопку мыши. Родительское окно получает это сообщение только, если дочернее окно не обрабатывает его.

WM_MOUSEMOVE сообщение поступает, когда курсор переместился. Если мышь не зафиксирована, сообщение отправлено к окну, которое содержит курсор. Иначе, сообщение отправлено к окну, которое фиксировало мышь. X= LOWORD (lParam);y= HIWORD (lParam);

WM_RBUTTONDOWN сообщение, когда пользователь нажимает правую кнопку мыши, в то время как курсор находится в области клиента окна. Если мышь не зафиксирована, сообщение отправлено к окну ниже курсора. Иначе, сообщение отправлено к окну, которое фиксировало мышь.

WM_RBUTTONUP сообщение отправлено, когда пользователь выпускает правую кнопку мыши, в то время как курсор находится в области клиента окна. Если мышь не зафиксирована, сообщение отправлено к окну ниже курсора. Иначе, сообщение отправлено к окну, которое фиксировало мышь. WM_LBUTTONDOWN, WM_LBUTTONUP

WM_NCMOUSEMOVE – сообщение поступает когда курсор мыши перемещается в неклиетской (нерабочей) области окна.

По поводу двойного щелчка мыши – необходимо в стилях класса установить макрос CS_DBLCLKS в этом случае приложение будет получать сообщение WM_LBUTTONDBLCLK