Инкрементный регулятор (Spin Button Control)


     Инкрементный регулятор предназначен для получения от пользователя значения некоторого параметра в заданном диапазоне.
     Инкрементный регулятор выглядит, как пара стрелок, на которых пользователь может щелкать мышью, увеличивая или уменьшая значение параметра.
     Как правило, рядом с инкрементным регулятором размещается другой элемент управления - текстовое поле (он является buddy control), в котором выводится числовое значение параметра. Если инкрементный регулятор получил фокус ввода, то параметр можно менять и с помощью клавиш управления курсором "вверх" и "вниз".
     
     Создайте SDI-приложение при помощи AppWizard. Назовите его Spin.
     Щелкните правой кнопкой мыши на имени класса CSpinView в окне ClassView и выберите в контекстном меню пункт Add Member Variable.
     В поле Variable type (тип переменной) укажите тип CSpinButtonCtrl. В поле Variable Declaration (описание переменной) укажите имя переменной m_spin. В поле Access (доступ) установите флажок на поле Protected (защищенный). Нажмите на кнопку ОК.
     Щелкните правой кнопкой мыши на имени класса CSpinView в окне ClassView и выберите в контекстном меню пункт Add Member Variable.
     В поле Variable type (тип переменной) укажите тип CEdit. В поле Variable Declaration (описание переменной) укажите имя переменной m_edit. В поле Access (доступ) установите флажок на поле Protected (защищенный). Нажмите на кнопку ОК.
     Теперь перейдем к формированию линейного индикатора.
     Все элементы управления формируются методом OnCreate() класса представления CSpinView. Эта функция обрабатывает сообщение Windows WM_CREATE. Чтобы включить этот метод в класс представления щелкните правой кнопкой мыши на имени класса CSpinView в коне ClassView и выберите в контекстном меню пункт Add Windows Message Handler (Добавить обработчик сообщений). Выберите WM_CREATE из списка слева и затем щелкните на кнопку Add and Edit (Добавить и редактировать). После комментария TODO вставьте строку:
          CreateSpin();
     Снова щелкните правой кнопкой мыши на имени класса CSpinView в окне ClassView и выберите в контекстном меню пункт Add Member Function (Добавить функцию член). Задайте тип возвращаемого значения в поле Function Type (тип функции) как void, а в поле Function Declaration (описание функции) введите объявление функции CreateSpin(). Метод должен быть объявлен открытым (public). Нажмите на кнопку ОК.
     Добавьте в эту функцию следующий код:
     void CSpinView::CreateSpin()
     {
          m_edit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(100,40,150,60), this, IDC_BUDDYEDIT);
          m_spin.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_ARROWKEYS, CRect(0,0,0,0), this, IDC_SPIN);
          m_spin.SetBuddy(&m_edit);
          m_spin.SetRange(1, 31);
          m_spin.SetPos(10);
     }

     В меню View запустите Resource Symbols ... Откроется диалоговое окно Resource Symbols. Нажмите на кнопку New... В диалоговом окне New Symbol в поле Name введите IDC_BUDDYEDIT, поле Value оставьте по умолчанию. Нажмите на кнопку ОК. Нажмите на кнопку New... В диалоговом окне New Symbol в поле Name введите IDC_SPIN, поле Value оставьте по умолчанию. Нажмите на кнопку ОК, затем на кнопку Close.
     Откомпилируйте приложение и вы увидите текстовое поле с инкрементным регулятором, текущее значение которого равно 10.
     
     Если у Вас все работает, то пора разобраться что мы написали.
     При создании инкрементного регулятора функция CreateSpin() формирует связанный с ним элемент управления (buddy control), в котором выводится значение параметра. Для создания текстового поля вызывается функция-член Create() класса CEdit.
     Эта функция имеет четыре параметра:
     Флаг стиля - это те же константы, которые используются для описания любого окна (ведь элемент управления есть окно специального вида).
     В данном случае нужно включить следующие константы:
     После формирования текстового поля можно приступить к формированию инкрементного регулятора. Для формирования инкрементного регулятора по той же методике вызывается функция-член Create() класса СSpinButtonCtrl, соответствующему этому типу элементов управления.
     Как и для большинства элементов управления, флаги стиля задаются в виде комбинации символов констант стиля, в набор которых входят как константы, применимые для всех окон, так и специально объявленные для инкрементного регулятора в классе CSpinButtonCtrl. В следующей таблице представлены эти специальные константы стиля:
UDS_ALIGNLEFT Размещает регулятор у левой границы buddy control.
UDS_ALIGNRIGHT Размещает регулятор у правой границы buddy control.
UDS_ARROWKEYS Позволяет пользователю применять клавиши управления курсором "вверх" и "вниз" для изменения параметра регулятора.
UDS_AUTOBUDDY Размещает на экране последовательно buddy control и регулятор.
UDS_HORZ Рисует горизонтальный регулятор.
UDS_NOTHOUSANDS Удаляет разделитель между триадами цифр.
UDS_SETBUDDYINT Выводит значение параметра регулятора в buddy control.
UDS_WRAP Устанавливает режим "кольца", когда после достижения верхнего предела диапазона параметр получает значение нижнего предела и наоборот.

     После того как инкрементный регулятор сформирован, его нужно инициализировать. Класс CSpinButtonCtrl имеет ряд функций-членов, которые позволяют инициализировать элемент управления и манипулировать им.

Функция Назначение
Create() Создает элемент управления.
GetAccel() Считывает скорость изменения параметра.
GetBase() Считывает основание системы счисления для вывода значения параметра.
GetBuddy() Считывает указатель объекта - элемента buddy control.
GetPos() Считывает текущее значение параметра регулятора.
GetRange() Считывает диапазон значений параметра инкрементного регулятора (верхний и нижний предел)
SetAccel() Устанавливает скорость изменения параметра.
SetBase() Устанавливает основание системы счисления для вывода значения параметра (10 - для десятичной системы, 16 - для шестнадцатеричной).
SetBuddy() Устанавливает указатель объекта - элемента управления buddy control.
SetPos() Устанавливает текущее значение параметра регулятора.
SetRange() Устанавливает диапазон значений параметра элемента управления (максимальное и минимальное значения).

     В нашем примере были использованы функции: Create, SetBuddy, SetRange, SetPos.

Содержание

Hosted by uCoz



Смотрите также:



Hosted by uCoz