Лекция 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++ |
Лекция 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++ |