Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC Лекции PDF / VC 17 Лек Дополнительные элементы управления.pdf
Скачиваний:
34
Добавлен:
15.02.2015
Размер:
251.36 Кб
Скачать

Лекция 17

Дополнительные элементы управления

1

Л Е К Ц И Я 1 7

СПИН-КНОПКА _________________________________________________________________________ 1

Функции класса CSpinButtonCtrl ___________________________________________________________ 1 Пример использования спин-кнопки________________________________________________________ 1 Акселераторы__________________________________________________________________________ 2

Пример получения значений параметров акселераторов ______________________________________ 3 Пример установки значений параметров акселераторов_______________________________________ 3

ПОЛЗУНОК _____________________________________________________________________________ 3

Пример использования элемента управления Spin Button______________________________________ 4 Функции класса CSliderCtrl _______________________________________________________________ 4

СПИН-КНОПКА

Это пара кнопок со стрелками, назначение которых – изменение (уменьшение-увеличение) значения, например, позиции прокрутки или числового значения. Элемент управления Spin Button возвращает значение типа short, которое может изменяться в пределах от –32 768 до 32 767. Иерархия классов до класса CSpinButtonCtrl представлена на рисунке.

CObject

CCmdTaget

CWnd

CSpinButtonCtrl

Если спин-кнопка создается не в шаблоне блока диалога, то необходимо воспользоваться функцией

Create ( ).

Функции класса CSpinButtonCtrl

Для использования спин-кнопки необходимо создать с помощью ClassWizard ассоциированную переменную типа CSpinButtonCtrl. Этот объект хранит положение спин-кнопки (текущее значение), которое пользователь может изменить с помощью щелчка кнопкой мыши. Необходимо отметить, что положение спин кнопки хранится в двухбайтной переменной. Поэтому передавать положение нужно в переменную типа short или преобразовывать его с помощью соответствующей функции преобразования типа. Для операций со спин-кнопкой в классе CSpinButtonCtrl определены следующие функции:

SetRange ( )

устанавливает диапазон значений;

GetRange ( )

возвращает диапазон значений;

SetAccel ( )

устанавливает параметры акселераторов;

GetAccel ( )

получает параметры акселераторов;

SetPos ( )

устанавливает положение элемента управления;

GetPos ( )

возвращает положение элемента управления;

SetBase ( )

установить основание системы счисления (10 или 16);

GetBase ( )

возвращает основание системы счисления.

Пример использования спин-кнопки

Рассмотрим пример, который демонстрирует основные приёмы использования спинкнопки. Диалоговое окно IDD_SPINDEMO_DIALOG содержит текстовое поле IDC_EDIT и элемент управления IDC_SPIN, с помощью которого пользователь может изменить значение, отображаемое в текстовом поле с шагом 0,1 в диапазоне от –100 до 100. Пользователь также может ввести значение непосредственно в текстовое поле.

Код, включённый в класс CSpinDemoDlg, имеет вид:

class CSpinDemoDlg : public CDialog

{

public :

CSpinButtonCtrl

m_spin ; // переменная ассоциированная со спин-кнопкой IDC_SPIN

Выжол Ю.А.

Программирование на Visual C++

количество акселераторов, определённых в спин-кнопке;
указатель на массив акселераторов типа UDACCEL, который содержат информацию об акселераторах. Элементы массива должны быть отсортированы по возрастанию по времени ожидания.

Лекция 17

Дополнительные элементы управления

2

float

m_edit ; // переменная ассоциированная с текстовым полем IDC_EDIT

 

} ;

 

 

void CSpinDemoDlg::DoDataExchange ( CDataExchange* pDX )

{

DDX_Control ( pDX , IDC_SPIN , m_spin ) ;// связывает спин-кнопку IDC_SPIN с переменной m_spin DDX_Text ( pDX , IDC_EDIT , m_edit ) ; // связывает текстовое поле IDC_EDIT

 

// с переменной m_edit

DDV_MinMaxFloat ( pDX , m_edit , -100.f , 100.f ) ;

// определяет диапазон допустимых

}

// значений переменной m_edit

 

 

// функция инициализации диалогового окна

 

BOOL CSpinDemoDlg :: OnInitDialog ( )

 

 

{

 

 

m_spin.SetRange ( -1000 , 1000 ) ;

// определяет диапазон изменения значения,

m_spin.SetPos ( 100 ) ;

// возвращаемого спин-кнопкой IDC_SPIN

// определяет начальное значение спин-кнопки IDC_SPIN

}

 

 

// функция обработки события изменения значения текстового поля IDC_EDIT

void CSpinDemoDlg :: OnChangeEdit ( )

 

 

{

 

 

UpdateData ( ) ;

// считывает данные из спин-кнопки IDC_EDIT

m_spin.SetPos (( int ) m_edit*10 ) ;

// в ассоциированную переменную m_edit

// передаёт значение переменной m_edit

}

// в спин-кнопку IDC_SPIN

 

 

// функция обработки события изменения положения спин-кнопки

void CSpinDemoDlg :: OnDeltaPosSpin ( NMHDR* pNMHDR , LRESULT* pResult )

{

 

 

m_edit = (( short ) m_spin.GetPos ( )) / 10.0f ;

// считывает данные из спин-кнопки IDC_SPIN

UpdateData ( false ) ;

// в переменную m_edit

// передаёт значение переменной m_edit

}

// в текстовое поле IDC_EDIT

 

Акселераторы

Изменять значение в текстовом поле с помощью щелчка мыши на спин-кнопке удобно, но долго. Поэтому в элементе управления предусмотрены акселераторы, которые изменяют шаг изменения позиции, в том случае, когда пользователь долго жмёт кнопку мыши на спин-кнопке. Для хранения акселератора в библиотеке MFC объявлена структура UDACCEL в следующем виде:

typedef struct

{

int nSec ;

// время ожидания в секундах

int nInc ;

// шаг изменения позиции после nSec секунд ожидания

} UDACCEL ;

 

Спин-кнопка содержит несколько акселераторов в соответствующем массиве, доступ к которому можно получить с помощью следующих функций:

UINT GetAccel ( int nAccel , UDACCEL* pAccel ) const ; BOOL SetAccel ( int nAccel , UDACCEL* pAccel ) ;

Функция GetAccel ( ) возвращает количество акселераторов, определённых в спин-кнопке. Функция SetAccel ( ) возвращает true, если выполнена успешно. Параметры функций:

nAccel pAccel

По умолчанию в спин-кнопке определены три акселератора со следующими значениями параметров:

0

1

2

nSec

0

2

5

nInc

1

5

20

Выжол Ю.А.

 

 

Программирование на Visual C++