Программирование для IBM OS/2© Александр Фролов, Григорий ФроловТом 25, М.: Диалог-МИФИ, 1993, 286 стр. 8.7. РегуляторыДля регулировки каких-либо величин (цвета, громкости, яркости, размеров и т. п.) в приложениях Presentation Manager вы, конечно, можете использовать только что рассмотренную полосу просмотра. Однако есть более подходящее решение - создание регуляторов на базе предопределенного класса окна WC_CIRCULARSLIDER или WC_SLIDER . Первый из этих классов позволяет легко создать регулятор круглой формы, напоминающий хорошо знакомые вам регуляторы в радиоаппаратуре. На базе класса WC_SLIDER можно создать линейный регулятор. В нашей книге мы рассмотрим только регулятор круглой формы (рис. 8.6), отложив описание линейного регулятора до одной из следующих книг, посвященных операционной системе IBM OS/2 Warp.
Рис. 8.6. Регулятор круглой формы Круглый регулятор может иметь кнопки (со знаками + и -), предназначенные для изменения текущей позиции, а также риски. Основной орган, который используется для изменения текущей позиции круглого регулятора, это круглая ручка, на которой имеется одна большая риска или углубление круглой формы. Если пользователь делает щелчок левой клавишей мыши справа от риски, ручка поворачивается по часовой стрелке, если слева - против часовой стрелки. Еще один способ управления - поворачивание ручки при нажатой левой клавиши мыши, когда курсор мыши расположен на поверхности ручки. Круглая ручка может иметь окно, в котором отображается значение текущей позиции, а также подпись. Все эти элементы показаны на рис. 8.5. Создание круглого регулятораДля создания круглого регулятора вы можете воспользоваться функцией WinCreateWindow, как это показано ниже: hWndCirc1 = WinCreateWindow(hWnd, WC_CIRCULARSLIDER , "Красный", WS_VISIBLE | CSS_NOTEXT, 0, 0, 0, 0, hWnd, HWND_TOP, CIRCSLD1_ID, NULL, NULL); Здесь мы привели фрагмент обработчика сообщения WM_CREATE функции окна приложения Client Window, имеющего идентификатор hWnd. Размеры и расположение регулятора будут определены позже при обработке сообщения WM_SIZE. Как вы можете заметить, регулятор создается точно также, как и любой другой описанные нами ранее орган управления. Внешний вид круглой ручки управления
определяется стилем регулятора. Ниже приведены
значения стилей, которые вы можете комбинировать
при помощи логической операции ИЛИ:
Установка параметров круглого регулятораПосле создания круглого регулятора вы должны определить диапазон изменения значений позиции, установить начальную позицию, шаг изменения позиции и шаг размещения меток. Для выполнения всех этих операций необходимо послать окну регулятора соответствующие сообщения. Диапазон изменения значенийДля установки диапазона изменения значений регулятору с помощью функции WinSendMsg посылается сообщение CSM_SETRANGE : WinSendMsg(hWndCirc1, CSM_SETRANGE, MPFROMLONG(0L), MPFROMLONG(255L)); Через параметр mp1 этого сообщения передается начальное значение, а через параметр mp2 - конечное значение позиции. В приведенном выше примере при вращении ручки регулятора текущая позиция будет изменяться в диапазоне от 0 до 255. Начальная позицияНачальная позиция регулятора устанавливается при помощи сообщения CSM_SETVALUE . Ниже показан фрагмент кода, в котором начальная позиция устанавливается равной 255: WinSendMsg(hWndCirc1, CSM_SETVALUE, MPFROMLONG(255L), NULL); Как видно из этого примера, значение начальной позиции передается через параметр mp1. Параметр mp2 не используется и должен быть равен нулю. Шаг изменения позиции и шаг размещения метокОба эти параметра устанавливаются одновременно при помощи сообщения CSM_SETINCREMENT : WinSendMsg(hWndCirc1, CSM_SETINCREMENT, MPFROMLONG(10L), MPFROMLONG(2L)); Через параметр mp1 передается значение шага изменения позиции, а через параметр mp2 - значение шага размещения меток. Чем больше шаг изменения позиции, тем грубее регулировка. Замена кнопокПри необходимости вы можете изменить внешний вид кнопок + и -, подготовив для них новые растровые изображения. Идентификаторы этих изображений необходимо передать вместе с сообщением CSM_SETBITMAPDATA . Подробное описание этого сообщения мы приведем в одной из следующих книг после того, как познакомим вас с графическим интерфейсом системы Presentation Manager и опишем способы работы с растровыми изображениями. Определение параметров круглого регулятораПри необходимости приложение может определить текущие параметры регулятора, посылая его окну управляющие сообщения. Текущее значение позицииС помощью сообщения CSM_QUERYVALUE приложение может определить текущее значение позиции. Для этого через параметр mp1 вместе с этим сообщением необходимо передать указатель на переменную типа USHORT, в которую будет записано искомое значение. Диапазон изменения значенийПосылая окну регулятора сообщение CSM_QUERYRANGE , приложение может определить диапазон изменения значений. Через параметр mp1 при этом необходимо передать указатель на переменную типа USHORT, в которую будет записано начальное значение позиции, а через параметр mp2 - указатель на переменную такого же типа для записи конечной позиции регулятора. Радиус регулятораВы можете определить радиус регулятора, посылая его окну сообщение CSM_QUERYRADIUS . Через параметр mp1 при этом необходимо передать указатель на переменную типа USHORT, в которую будет записан радиус. Шаг изменения позиции и шаг размещения метокДля определения шага изменения позиции и шага размещения меток окну регулятора необходимо послать сообщение CSM_QUERYINCREMENT . Через параметры mp1 и mp2 необходимо передать указатели на переменные типа USHORT, в первую из которых будет записано значение шага изменения позиции, а во вторую - значение шага размещения меток. Извещения от круглого регулятораКогда пользователь выполняет какие-либо операции с регулятором, в родительское окно, создавшее этот орган управления, поступают извещающие сообщения с кодом WM_CONTROL . Обработчик этого сообщения должен выполнять установку значения параметра, который регулируется пользователем. Младшее слово параметра mp1 сообщения WM_CONTROL содержит идентификатор регулятора. Если ваше приложение создает несколько регуляторов или других органов управления, посылающих извещения в виде сообщения WM_CONTROL, вы должны проверять этот параметр. Через старшее слово параметра mp1 передается код
извещения, который соответствует операции,
выполняемой пользователем. Код извещения может
принимать одно из следующих значений:
Помимо перечисленных выше, от круглого регулятора поступает извещение с кодом CSN_QUERYBACKGROUNDCOLOR . Это извещение можно использовать для изменения цвета фона регулятора. |