Функции ввода. Сообщения мыши.

Страницы работы

Содержание работы

функцииввода

В системе Windows приложение принимает ввод от пользователя через мышь или клавиатуру. Такие встроенные в Windows элементы управления, как кнопки, элементы управления редактированием, меню и т.д., отвечают на события клавиатуры и мыши соответствующим образом по умолчанию. Однако для некоторых приложений необходимо изменить предусмотренные по умолчанию действия клавиатуры или мыши, как в случае элементов управления, определяемых пользователем. В API Win32 предусмотрен широкий набор функций для управления клавиатурой и мышью.

Сообщениямыши

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

Таблица 9. 1. Обычные сообщения мыши

Сообшение

Описание

WMJ.BUTTONDBLCLK

Левая кнопка мыши нажата второй раз в течение времени регистрации двойного щелчка

WM_LBUTTONDOWN

Нажата левая кнопка мыши

WM_LBUTTONUP

Отпущена левая кнопка мыши

WM_MOUSEMOVE

Передвинут курсор мыши

WM_NCHITTEST

Выполняется проверка, над объектом какого типа находится курсор (рамка, заголовок, клиентская область и т.д.)

WM_NCMOUSEMOVE

Курсор мыши переместился внутри неклиентской области окна

WM_RBUTTONDBLCLK

Правая кнопка мыши нажата второй раз в течение времени регистрации двойного щелчка

WM_RBUTTONDOWN

Нажата правая кнопка мыши

WM_RBUTTONUP

Отпущена правая кнопка мыши

WM_SETCURSOR

Должна быть выполнена смена курсора мыши

Когда приложение получает сообщение мыши, значение параметра IParamэтого сообщения содержит координаты дс, у курсора на экране. Координата у находится в старшем слове, координата д: — в младшем. Для извлечения этих двух значений применяются макрокоманды LOWORDи HIWORD. В листинге 9.1 показан фрагмент программы, который связан с обработкой сообщений WM_MOUSEMOVEв функции WndProc.

Листинг 9.1. СообщенияWM_MOUSEMOVEвфункцииWndProc__________________________

LKESULT CALLBACK WndProc( ИТОГО hWnd, OINT uMsg, WPARAM wParam, LPARAM IParam )

{

static int nXpos, nYpos;

switch( uMsg )

{

case WM_MOUSEMOVE:

nXpos = LOWORD ( IParam ) ; nYpos = HIWORD ( IParam ) ;

Обратите внимание, что позиция курсора мыши указана относительно левого верхнего угла клиентской области окна. В API Win32 предусмотрены две функции для прямого и обратного преобразования экранных и клиентских координат: ScreenToClient и ClientToScreen. Эти функции часто применяются в составе процедур обработки сообщений мыши.

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

Сообщенияклавиатуры

Система Windows сообщает также приложению о нажатиях клавиш, посылая сообщения. Наиболее широко распространенные сообщения приведены в табл. 9.2.

Таблица 9.2. Обычные сообщения клавиатуры

Сообщение

Описание

WM  CHAR

Код ASCII для символа, если была нажата клавиша какого-то символа

WM  KEYDOWN

Сообщение о том, что была нажата клавиша

WM   KEYUP

Сообщение о том, что была отпущена клавиша

WM_SYSCHAR

Код ASCII для клавиши символа, которая была нажата при нажатой клавише Alt

WM SYSKEYDOWN

Сообщение о том, что была нажата клавиша при нажатой клавише Alt

WM SYSKEYUP

Сообщение о том, что была отпущена клавиша при нажатой клавише Alt

Сообщение WM_CHARвырабатывается функцией TranslateMessage в цикле обработки сообщений нити. Эта функция описана в главе 5. Как правило, в приложении для определения нажатий функциональных клавиш, клавиш со стрелками, клавиш цифровой клавиатуры и клавиш редактирования, таких как PgUp, PgDn и т.д..

Похожие материалы

Информация о работе