Шаг 52 - Что такое CSpinButtonCtrl

Создание проекта

В диалоговое окно из прошлого проекта необходимо добавить элемент CSpinButtonCtrl и CEdit, как на рисунке ниже.

52_1.gif (3629 b)

Теперь нам нужно установить свойства элементов управления. Первое это что в окне редактирования (CEdit) будут находиться цифры.

52_2.gif (4018 b)

И настройка Spin.. Для того чтобы производить изменение в дружественном окне отражающим число.

52_3.gif (5215 b)

Создаем код

Добавляем экземпляры классов.

class CTestDlg : public CDialog	// класс диалогового окна
{
...........
CProgressCtrl cProgress; // класс бегунка
CSpinButtonCtrl cSpin; // новые классы
CEdit cEdit; //

protected:
..........
};

Обмен данными.

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
..............
DDX_Control(pDX, IDC_PROGRESS1, cProgress); // бегунок
DDX_Control(pDX, IDC_SPIN1, cSpin); //
DDX_Control(pDX, IDC_EDIT3, cEdit); // с окном

}

Начальные настроки в OnInitDialog

BOOL CTestDlg::OnInitDialog()
{
............
csSlider.SetRangeMax(10,TRUE); // максимум
cSpin.SetBuddy(&cEdit); // подружить окно
cSpin.SetRange(0,100); // диапазон
cSpin.SetPos(50); // позиция
return TRUE;
}

Вот так все работает.

52_4.gif (3816 b)

Описание

При использовании данных элементов еще раз хочу обратить ваше внимание на установку свойств. Это важно. Некорректная установка приведет к тому, что совместно эти элементы работать не будут. Вы не замечали, какое количество тонкостей должен знать программист. Лично меня это всегда впечатляет. Итак. Включаем файл с описанием классов, там есть описание и нашего класса. Объявляет два класса в классе диалогового окна. Эти классы отвечают за элементы управления. Связываем их с использованием DDX для обмена данными между классом и элементом управления. И теперь в функции инициализации диалогового окна начинаем настройку. SetBuddy устанавливает связь между элементами управления. То есть при изменении данных в одном, изменятся данные и в другом. В параметрах передается указатель на окно, в которое выводятся результаты. Следующие две функции устанавливают диапазон значений и начальное положение. В функции OnSend мы выводим число находящееся в окне редактирования. В реальной программе доступ к нему может быть нужен в любой момент, это и демонстрируется.

Шпаргалка

Объявляем классы.

class CTestDlg : public CDialog	// класс диалогового окна
{
...........
CSpinButtonCtrl cSpin; // новые классы
CEdit cEdit; //
..........
};

DDX обмен.

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
..............
DDX_Control(pDX, IDC_SPIN1, cSpin); //
DDX_Control(pDX, IDC_EDIT3, cEdit); // с окном
}

Связать два элемента управления.

BOOL CTestDlg::OnInitDialog()
{
..............
cSpin.SetBuddy(&cEdit); // подружить окно
..............
}

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 12.10.99 (обновлено 13.07.2001)