Шаг 54 - Кнопки переключатели и CButton

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

Развиваем наш проект. Нам нужно поместить на элемент управления переключатель.

54_1.gif (4562 b)

Давайте поменяем у ней имя на Param.

54_2.gif (10830 b)

Создаем код

В классе диалогового окна нужен класс для переключателя.

class CTestDlg : public CDialog	// класс диалогового окна
{
..........
CTreeCtrl m_Tree; // класс дерева
CButton m_Check; // наш переключатель
protected:
.......
};

Обмен данными с элементом управления.

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
..........
DDX_Control(pDX, IDC_TREE1, m_Tree); // с деревом
DDX_Control(pDX, IDC_CHECK1, m_Check); // c переключателем
}

Меняем реакцию на кнопку Send.

void CTestDlg::OnSend()
{
if (m_Check.GetCheck()) AfxMessageBox("Ok"); // Если установлен показать OK
else AfxMessageBox("None"); // Иначе сказать None
m_Check.SetCheck(!m_Check.GetCheck()); // Поменять установки
}

Вот так будет все работать.

54_3.gif (6471 b)

Описание

Итак, создали кнопку переключатель. И для кнопки класс CButton, странно вроде. Но всё правильно, кнопка она как женщина, то такая, а через пять минут другая. Вот и может она принимать разные образы. В данном случае переключатель. Как обычно обмен данными через DDX. Так как мы создали еще одну конку для тестирования, функцию реакции и описание на основе идентификатора кнопки.

Смотрим OnSend. Самой первой строкой мы проверяем, в каком состоянии находится кнопка с помощью функции GetCheck(). Эта функция имеет тип int.

int GetCheck( ) const;

Возврат у неё такой

0 не установленно
1 установленно
2 неопределенное - это состояние есть только при
установке стилей BS_3STATE или BS_AUTO3STATE

Далее используя функцию SetCheck я меняю состояние на противоположное. Это сделано для демонстрации возможности изменения кнопки не только пользователем, но и программистом.

Настало время попробовать. Запускайте. Примените кнопку Send - вы получите состояние и произойдет изменение статуса.

Шпаргалка

Объявить класс.

class CTestDlg : public CDialog	// класс диалогового окна
{
..........
CButton m_Check; // наш переключатель
protected:
.......
};

Настроить DDX.

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
..........
DDX_Control(pDX, IDC_CHECK1, m_Check); // c переключателем
}

Анализируй выбор или меняй программно.

m_Check.GetCheck()
m_Check.SetCheck(...)

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