В диалоговое окно из прошлого проекта необходимо добавить элемент CSpinButtonCtrl и CEdit, как на рисунке ниже.
Теперь нам нужно установить свойства элементов управления. Первое это что в окне редактирования (CEdit) будут находиться цифры.
И настройка Spin.. Для того чтобы производить изменение в дружественном окне отражающим число.
Добавляем экземпляры классов.
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;
}
Вот так все работает.
При использовании данных элементов еще раз хочу обратить ваше внимание на установку свойств. Это важно. Некорректная установка приведет к тому, что совместно эти элементы работать не будут. Вы не замечали, какое количество тонкостей должен знать программист. Лично меня это всегда впечатляет. Итак. Включаем файл с описанием классов, там есть описание и нашего класса. Объявляет два класса в классе диалогового окна. Эти классы отвечают за элементы управления. Связываем их с использованием 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); // подружить окно
..............
}