- •Часть 2 (продолжение): Прикладное программирование в Windows
- •Глава 8. Виртуальное окно: работа с текстом
- •8.1. Оконные координаты, цвета, отображение строк
- •Кодировка rgb-значений
- •Размеры системных метрик
- •8.2. Виртуальное окно
- •Способы заполнения прямоугольной области
- •8.3. Изменение шрифтов
- •Макроимена распространенных шрифтов
- •8.4. Создание собственных шрифтов
- •Глава 9. Программирование графики
- •9.1. Логическая система координат
- •Рекомендуемый самый яркий состав цветов
- •9.2. Пиксели, линии, дуги, прямоугольники, эллипсы и секторы
- •9.3. Работа с перьями и кистями
- •Типы линий, создаваемых пером
- •9.4. Технология виртуального окна
- •9.5. Режимы отображения и области вывода
- •Текущий режим отображения (mappind mode)
- •Глава 10. Работа с панелями инструментов
- •10.1. Общие элементы управления
- •Общие элементы управления
- •10.2. Подключение и инициализация общих элементов управления
- •10.3. Работа с панелью инструментов
- •Начальные состояния кнопок панели инструментов
- •Стиль кнопки определяется (значения поля fsStyle)
- •Сообщения к панели инструментов
- •10.4. Создание растрового изображения для панели инструментов
- •10.5. Включение подсказок
- •Глава 11. Спины, ползунки и индикаторы процессов
- •11.1. Работа со спином
- •Стили «up-down control»
- •Сообщения, которые можно посылать спину
- •11.2. Создание спина с «приятельским» окном
- •11.3. Работа с ползунком
- •Значения стилей для ползунка
- •Перечень сообщений, которые можно посылать ползунку
- •Перечень нотификационных сообщения ползунка
- •11.4. Индикатор процесса
- •Управляющие сообщения индикатору
- •Глава 12. Многозадачность: процессы и потоки
- •12.1. Создание нового процесса (отдельной задачи)
- •Разрешенные значения поля dwFlags
- •12.2. Многопотоковые программы
- •12.3. Работа с несколькими потоками
- •12.4. Синхронизация процессов и потоков: семафоры
- •12.5. Обработка событий
- •Глава 13. Приемы программного управления вычислительным процессом
- •13.1. Использование функций Проводника Explorer для работы в файловой системе
- •Управляющая информация Проводника
- •Режимы обработки файлов
- •13.2. Создание собственных динамических библиотек (dll-файлов)
- •13.3. Работа с буфером обмена Clipboard
- •Функции подсистемы Clipboard
- •Свойства выделяемого блока памяти
- •Форматы и типы данных
- •Литература
Глава 11. Спины, ползунки и индикаторы процессов
В этой главе мы продолжим рассмотрение общих элементов управления. Будут рассмотрены спин (up-down control, spin, control), ползунок (track bar) и индикатор (progress bar).
11.1. Работа со спином
Во многих ситуациях Вы, несомненно, найдете удобным использование нового элемента управления, называемого спином (up-down control, spin control). Спин представляет собой не что иное, как особый вид линейки прокрутки (scroll bar). Он состоит из кнопок со стрелками, которые помещаются на концах линейки прокрутки, и не имеет полосы прокрутки, которая в линейках находится между этими кнопками. Если Вы уже работали с различными приложениями Windows, то, вероятно, заметили, что некоторые линейки прокрутки настолько малы, что полоса прокрутки для них просто не нужна. Достаточно только кнопок типа «вверх» и «вниз». Именно для подобных случаев разработчики Windows предусмотрели такой элемент управления, как спин. Как Вы вскоре увидите, работа со спином очень похожа на работу с линейкой прокрутки.
Существует два варианта использования спина:
1) он применяется как отдельная маленькая линейка прокрутки;
2) он может работать в сочетании с другим элементом управления, называемым в этом случае приятельским окном (buddy window).
В качестве приятельского окна чаще всего используется окно редактирования (edit box). Именно в этом случае в английском языке применяются термины «spin control» или «spinner window», во всех других случаях используется термин «up-down control». Практически все действия по управлению спином выполняются автоматически: это делает его очень простым и удобным элементом. Ниже приведены два примера работы со спином. В первом из них спин работает как небольшая линейка прокрутки, а во втором используется в сочетании с окном редактирования.
Создание спина. Для создания спина используется функция CreateUpDownControl():
HWND CreateUpDownControl(DWORD Style, int X, int Y,
int Width, int Height,
HWND hParent, int ID,
HINSTANCE hInst,
HWND hBuddy, int Max,
int Min, int StarPos);
Здесь параметр Style определяет стиль окна спина и должен содержать стандартные значения стилей WS_CHILD, WS_VISIBLE и WS_BORDER. Он также может включать стили, представленные в приведенной ниже таблице 11.1.
Таблица 11.1
Стили «up-down control»
№ |
Стиль |
Эффект |
1 |
UDS_ALIGNLEFT |
Спин размещается слева от приятельского окна |
2 |
UDS_ALIGNRIGHT |
Спин размещается справа от приятельского окна |
3 |
UDS_ARROWKEYS |
Разрешается использование клавиш со стрелками для изменения текущего значения спина |
4 |
UDS_AUTOBUDDY |
Определяется окно |
5 |
UDS_HORZ |
Создается горизонтальный спин (по умолчанию он располагается вертикально) |
6 |
UDS_NOTHOUSANDS |
Запрещается отображение запятой (для разделения триад) в больших числах (только для спинов с окнами редактирования) |
7 |
UDS_SETBUDDYINT |
Автоматически изменяется текст в приятельском окне при изменении позиции спина. Это позволяет автоматически отображать позицию спина в приятельском окне |
8 |
UDS_WRAP |
«Переворот» позиции спина при достижении граничного значения |
Положение левого верхнего угла спина задается параметрами X и Y, а его ширина и высота – параметрами Width и Height. Дескриптор родительского окна спина передается в параметре hParent. Идентификатор спина задается параметром ID. Параметр hInst задает дескриптор активного приложения. Дескриптор приятельского (buddy) окна передается в параметре hBuddy. Если приятельское окно отсутствует, значение этого параметра должно быть NULL.
Минимальное и максимальное значения позиций спина задаются параметрами Min и Мах. Если значение Мах меньше значения Min, спин прокручивается в обратную сторону. Значение начальной позиции спина (оно должно быть в пределах заданного диапазона) определяется параметром StarPos.
Функция CreateUpDownControl возвращает дескриптор элемента управления.
Сообщения спина. При нажатии какой-либо стрелки спина он посылает родительскому окну сообщение WM_VSCROLL. Дескриптор спина при этом передается в параметре lParam. Поскольку одновременно может существовать несколько элементов управления, посылающих сообщение WM_VSCROLL, дескриптор, передаваемый в lParam,позволяет установить, сообщение какого из этих элементов Вы обрабатываете в данный момент. Чтобы определить новую позицию спина, нужно, используя функцию SendMessage(), направить ему сообщение UDM_GETPOS. В этом случае функция возвратит значение текущего положения спина.
Кроме UDM_GETPOS спин может принимать и обрабатывать другие сообщения; наиболее часто используемые из них приведены в таблице 11.2. Например, используя сообщение UDM_SETPOS, можно установить текущую позицию спина.
Таблица 11.2
