Операционная система Microsoft Windows 3.1 для программиста -том 1


Управление курсором мыши с помощью клавиатуры - часть 3


// Вычисляем новые координаты курсора мыши // таким образом, чтобы курсор не выходил // за пределы окна pt.x = max(min(pt.x, rc.right), rc.left); pt.y = max(min(pt.y, rc.bottom), rc.top);

// Преобразуем оконные координаты в экранные ClientToScreen(hwnd, &pt);

// Устанавливаем курсор мыши // в новую позицию SetCursorPos(pt.x, pt.y);

return 0; }

case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam); }

Обработчик сообщения WM_KEYDOWN вызывает функцию GetCursorPos, которая записывает текущие экранные координаты курсора мыши в структуру pt.

Напомним, что начало экранных координат находится в левом верхнем углу экрана видеомонитора. Начало оконных координат находится в левом верхнем углу внутренней области окна. Поэтому нам необходимо преобразовать экранные координаты в оконные, для чего вызывается функция ScreenToClient:

void WINAPI ScreenToClient(HWND hwnd, POINT FAR* lppt);

В качестве первого параметра функции (hwnd) указывается идентификатор окна, для которого выполняется преобразование. Второй параметр (lppt) является указателем на структуру типа POINT. В эту структуру записываются преобразованные координаты. В нашем случае это оконные координаты курсора мыши:

ScreenToClient(hwnd, &pt);

Далее функция окна анализирует параметр wParam, который содержит код нажатой виртуальной клавиши. В зависимости от того, какая из клавиш перемещения курсора была нажата, происходит изменение отдельных компонент структуры pt, содержащей оконные координаты курсора мыши.

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

Для получения координат главного окна приложения вызывается функция GetClientRect:

GetClientRect(hwnd, &rc);

Она записывает сведения о расположении окна в структуру rc.




Начало  Назад  Вперед



Книжный магазин