Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programming_Windows_95_Part_I.pdf
Скачиваний:
96
Добавлен:
05.06.2014
Размер:
4.61 Mб
Скачать

67

Для каждого действия с полосой прокрутки сначала рассчитывается приращение ее текущей позиции при обработке сообщений WM_VSCROLL и WM_HSCROLL. Это значение затем используется для прокрутки имеющегося в окне содержимого с помощью вызова функции ScrollWindow. Эта функция имеет следующий формат:

ScrollWindow(hwnd, xInc, yInc, pRect, pClipRect);

Значения xInc и yInc задают величину прокрутки в пикселях. В SYSMETS3 значения pRect и pClipRect устанавливаются в NULL для указания, что необходимо прокручивать всю рабочую область. Windows делает недействительным прямоугольную зону рабочей области, открываемую операцией прокрутки. Это приводит к выдаче сообщения WM_PAINT. InvalidateRect больше не нужна. (Отметьте, что функция ScrollWindow не является процедурой GDI, поскольку ей не нужен описатель контекста устройства. Это одна из немногих функций Windows, которая меняет вид рабочей области окна, не являясь функциями

GDI.)

Обработчик сообщения WM_PAINT теперь определяет, какие строки находятся внутри недействительного прямоугольника и выводит только эти строки. Он делает это путем анализа координат верхней и нижней границ недействительного прямоугольника, хранящихся в структуре PAINTSTRUCT. Программа рисует только те строки текста, которые находятся внутри недействительного прямоугольника. Исходный текст программы более сложен, но она работает гораздо быстрее.

Поскольку сообщения WM_PAINT стали обрабатываться быстрее, теперь, очевидно, есть смысл обрабатывать в SYSMETS3 действия SB_THUMBTRACK для сообщений WM_VSCROLL. Ранее программа игнорировала сообщения SB_THUMBTRACK (которые посылаются, когда пользователь перемещает бегунок полосы прокрутки), а реагировала только на сообщения SB_THUMBPOSITION, которые посылаются, когда пользователь прекращает перемещение бегунка. Сообщение WM_VSCROLL также приводит к вызову функции UpdateWindow для немедленного обновления рабочей области окна. Когда Вы перемещаете бегунок по вертикальной полосе прокрутки, SYSMETS3 непрерывно прокручивает и обновляет рабочую область. Вам самим предлагается решить, насколько быстро работает SYSMETS3 (и Windows), и насколько оправданны внесенные изменения.

Мне не нравится пользоваться мышью

Впервое время существования Windows довольно многие пользователи пытались не пользоваться мышью. На самом деле в самой Windows (и во многих программах для Windows) мышь не требовалась. Хотя сегодня, в основном, персональные компьютеры без мыши ушли в прошлое вместе с монохромными дисплеями и матричными принтерами, вам по-прежнему рекомендуется писать программы, где бы действия мыши дублировались с помощью клавиатуры. Это особенно очевидно для таких фундаментальных средств, как полосы прокрутки, тем более, что в наших клавиатурах имеется целый набор клавиш, управляющих движением курсора, которые должны выполнять те же операции.

Вглаве 5 вы узнаете, как использовать клавиатуру и как добавить в вашу программу интерфейс клавиатуры. Вы также увидите, что SYSMETS3 обрабатывает сообщения WM_VSCROLL, когда младшее слово в wParam равно SB_TOP и SB_BOTTOM. Уже упоминалось, что оконная процедура не получает эти сообщения от полос прокрутки, поэтому для данного случая эти коды излишни. Когда мы в главе 5 вернемся к этой программе, вы увидите смысл во включении в программу этих действий.

Соседние файлы в предмете Операционные системы