Основные элементы управления
Рассмотрим пример создания диалогового приложения с различными управляющими элементами (рис. 7.2.1).
Рис. 7.2.1. Диалоговое окно с примером
1. Создадим папку для хранения приложения.
2. Выполнить команду New/Project/MFC AppWizard (exe).
3. Введем в поле Project Name имя программы Prim и нажмем кнопку OK.
4. На первом шаге мастера выберем вариант создания диалогового приложения (Dialog based) и нажмем кнопку Next.
5. Последовательно пройдем все остальные шаги мастера (всего четыре шага) и нажмем кнопку Finish. Сформируется заготовка окна.
6. Удалим с формы текст TODO: Place dialog control here.
7. Выполним команду Properties контекстного меню элемента Prim resources/Dialog/IDD_Prim_Dialog и в поле Language выберем Russian.
8. В окне свойств формы зададим наименование формы Пример использования управляющих элементов (свойство Caption), размер и наименование соответствующего шрифта установим кнопкой Font.
9. Разместим элемент Static Text(Caption=Текстовое поле).
10. Разместим элемент Text Box(IDC_EDIT1).
11. Аналогично создадим заголовок (Счетчик) и поле IDC_EDIT2.
12. Разместим элемент Spin(IDC_SPIN1) рядом с полем IDC_EDIT2 и установим свойства: Alignment=Right (выравнивание справа), Auto buddy (автоматическое подключение связанного элемента, созданного перед счетчиком (IDC_EDIT2)), Set buddy integer (целочисленное значение счетчика), Arrow Keys (изменение значения счетчика с помощью клавиш).
Изменим название кнопки Cancel на Отмена.
13. Разместим элемент Combo Box(IDC_COMBO1) под кнопками, щелкнем по кнопке раскрытия списка и перенесем вниз нижнюю часть. На странице Data свойства этого элемента введем (для перехода на следующую строку нажимаются клавиши ^Enter) три строки со значениями 5, 15, 300. Снимем флажок сортировки (Sort) и установим выравнивание текста справа (Right aligned text).
14. Разместим элемент Radio Button(IDC_RADIO1) со свойствами: Caption=Текстовое поле, Group.
15. Аналогично разместим элемент IDC_RADIO2 с надписью Счетчик, но без флажка Group.
16. Разместим снаружи радиокнопок элемент Group Box с надписью Выбор поля для сохранения.
17. Разместим поле CheckBoxс надписью Сохранять предыдущее значение.
18.
Выполним команду View/ClassWizard и раскроем страницу Member Variable(рис. 7.2.2). Выделим ресурс IDC_EDIT2, нажмем кнопку Add Variable и заполним окно с описанием переменной m_chethik (рис. 7.2.2).
Рис. 7.2.2. Страница переменных и окно добавления переменной
Аналогичным образом назначим переменные: m_cpicok для IDC_COMBO1, m_edit1 для IDC_EDIT1, m_radio1 для IDC_RADIO1, m_check1 для IDC_CHECK1.
19. На странице Message Mapsвыделим объект IDC_RADIO1, сообщение BN_CLICKи нажмем кнопку Add Member Fuction (рис. 7.2.3); оставим без изменения имя функции, нажмем кнопку OK.
Рис. 7.2.3. Страница сообщений и окно добавления функции обработки сообщения
20. Аналогичным образом определим функции обработки сообщений: UDN_DELTAPOS для ресурса IDC_SPIN1, BN_CLICED для IDC_RADIO2, CBN_SELENDOK для IDC_COMBO1.
21. Вставим в тело функций OnSelendokCombo1, OnRadio1, OnRadio2 вызов функции UpdateData() для обновления значений соответствующих переменных путем вызова и выполнения функции DoDataExchange. В конце функции OnDeltaposSpin1 включим оператор pNMUpDown->iDelta=-pNMUpDown->iDelta для установления общепринятого в Office изменения счетчика: стрелка вниз - уменьшение и вверх - увеличение значения счетчика, а не наоборот, как это принято в Visual С.
22. Откорректируем следующие операторы функции (конструктора класса) CprimDlg, которые присваивают начальные значения элементам:
m_chethik = _T("5"); m_cpicok = _T("10"); m_edit1 = _T("15");
23. Приведем функцию DoDataExchange к следующему виду:
void CPrimDlg::DoDataExchange(CDataExchange* pDX)
{ CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT2, m_chethik); // m_chethik=IDC_EDIT2
DDV_MaxChars(pDX, m_chethik, 3); //длина значения m_chethik <=3
DDX_CBString(pDX, IDC_COMBO1, m_cpicok);
DDV_MaxChars(pDX, m_cpicok, 3); //длина значения m_cpicok <=3
DDX_Text(pDX, IDC_EDIT1, m_edit1); // m_edit1=IDC_EDIT1
DDX_Radio(pDX, IDC_RADIO1, m_radio1); // m_radio1=IDC_RADIO1
DDX_Check(pDX, IDC_CHECK1, m_check1); // m_check1=IDC_CHECK1
if (m_check1)
{ switch (m_radio1) //значения переменных->в управляющие элементы
{ case 0: SetDlgItemText(IDC_EDIT1,m_cpicok); break;
case 1: SetDlgItemText(IDC_EDIT2,m_cpicok);
}
}
}
24. Сохраним проект и нажмем кнопку Execute Program для выполнения программы.
Списки
Продолжим формирование предыдущего примера.
1. Разместим элементы List Box (IDC_LIST1), Edit Box (IDC_EDIT3), Button (IDC_Add, Добавить), Button (IDC_Delete, Добавить) и надписи (Static Text) Список, Элемент списка (рис. 7.2.1).
2. Назначим переменные m_edit3 (для элемента IDC_EDIT3), m_list1 (категории Control для элемента IDC_LIST1).
3. Добавим функции OnAdd и OnDelete формирования сообщений BN_CLICKED (обработки щелчков мышки) для кнопок Добавить и Удалить и функцию OnDblclkList1 (обработка двойных щелчков мышки на поле со списком) формирования сообщения LBN_DBLCLK для IDC_LIST1.
4. Нажмем кнопку Edit Code и откорректируем.
void CPrimDlg::OnAdd() //обработка кнопки «Добавить»
{ UpdateData(); m_list1.AddString(m_edit3) //добавить строку в список
}
void CPrimDlg::OnDelete()//обработка кнопки «Удалить»
{ if (m_list1.GetCurSel()!=LB_ERR) //проверка выделенной строки в списке
m_list1.DeleteString(m_list1.GetCurSel()); //удалить выделенную строку
UpdateData(); //обновить объекты формы
}
void CPrimDlg::OnDblclkList1() //обработка двойного щелчка по списку
{ if (m_list1.GetCurSel()!=LB_ERR) //проверка выделенной строки в списке
{ CString r; //объявление строковой переменной
m_list1.GetText(m_list1.GetCurSel(),r); //r=выделенная строка списка
SetDlgItemText(IDC_EDIT3, r); //значение r помещается в поле EDIT3
}
}
5. Сохраним проект и нажмем кнопку выполнения Execute Program.
Дата добавления: 2016-03-22; просмотров: 632;