Лабораторная работа №4. Работа с элементом управления «Окно списка» (ListBox)
Цель лабораторной работы: Научиться использовать элемент управления ListBox а также основные методы класса СListBox. Использование возможности контроля правильности ввода исходных данных.
Класс CListBox
Класс CListBox обеспечивает функционирование окна списка. В окне списка могут отображаться различные элементы, которые пользователь может просматривать и выделять.
Окно списка имеет два режима выделения элементов:
- единичный выбор, т.е. может быть выделен только один элемент списка;
- множественный выбор, т.е. в списке одновременно могут быть выделены несколько элементов.
Окно списка может содержать как один столбец, так и несколько столбцов с элементами.
Основные методы данного класса
Для добавления строки в список в классе CListBox объявлена функция:
int AddString( LPCTSTR lpszItem );====07.02.03
здесь параметр lpszItem – указатель на нуль - терминированную строку, добавляемую в список. Функция возвращает номер строки в списке, перед которой добавлялся текст, причем первая строка имеет нулевой индекс.
Кроме того данный класс имеет такие методы как:
- int GetCount() const; при успехе метод возвращает количество
- элементов в окне списка;
- void SetColumn(int Wingth); метод устанавливает ширину всех
- колонок списка;
- int GetCutSel(); метод возвращает индекс выделенного элемента
- списка;
- int DeleteString(UINT n); метод удаляет строку с индексом n;
- int InsertString(int n, LPCTSTR lpszItem); метод вставляет в
- указанное место n строку, если индекс n равен –1, то строка будет добавлена в конец списка.
Если в процессе работы функций возникла ошибка, то возвращается
величина LB_ERR, если эта ошибка была связана с нехваткой памяти для хранения новой строки, то возвращается величина LB_ERRSPASE.
Для очистки всего списка объявлена функция:
void ResetContent( );
Эта функция не получает и не возвращает параметры.
Пример реализации программы
Задание: Написать и отладить программу, которая выводит таблицу функций
для х изменяющихся от Х1 до Х2 с нагом Н. Программа должна выглядеть как представлено на рисунке 1.
Для решения задачи необходимо проделать следующие действия:
1) Создать при помощи MFCAppWizard(exe) новый проект (предварительно выбрав путь и имя) типа Dialog based.
2) Используя панель Controls, нанести на Dialog - 4 элемента типа Edit Box и Static Text (объединив их элементом Group Box), 2 – Buttons и 1 – ListBox для вывода результатов. Установить нужные свойства и надписи.
3) При помощи ClassWizard через закладку Member Variables связать поле Edit1 с переменной m_x1, выполнив команду ClassWizard/Member Variables, сделать щелчок на IDC_EDIT1, щелчок на Add Variable и в появившейся закладке в поле name: m_x1 тип: double и и щелчок на OK,
установить диапазон: Minimum Value: 0.1; Maximum Value: 0.3;
По аналогии связать:
Edit2 - с m_х2 тип: double, диапазон: 0.7 –0.9;
Edit3 - с m_h тип: double, диапазон: 0.1 –0.2;
Edit4 - с m_n тип: int, диапазон: 5 –20.
Элемент ListBox связать с m_l, назначив Category: Control, установив тем самым для данного объекта тип CListBox, т.е. для данного объекта можно вызывать методы по всей цепи иерархии данного класса MFC. Так для стирания окна вывода в обработчик щелчка на кнопке CLEAR можно вызвать следующий метод: m_l.ResetContent().
В обработчике щелчка на кнопке «RUN» введенные в класс диалога переменные m_х1, m_х2, m_h, m_n, при помощи циклических алгоритмов (внешний – по x а внутренний цикл – по параметру i для вычисления суммы для текущего аргумента) написать текст программы решения поставленной задачи.
Для вывода информации о разработчике и введенных исходных данных необходимо воспользоваться методом класса ListBox – AddString:
UpdateData(TRUE);
str.Format("Разработка Иванова И.И");
m_l.AddString(str);
UpdateData(FALSE);
str.Format("Исходные данные: x1=%.2lf, x2=%.2lf, h=%.2lf, n=%2d",
m_x1,m_x2,m_h,m_n);
m_l.AddString(str);
UpdateData(FALSE);
Участок вывода текущей строки таблицы в окно результатов может быть таким:
str.Format("при x=%.2lf, Summa=%.2lf, точное значение=%.2lf",
x,s,y);
m_l.AddString(str);
UpdateData(FALSE);
4) Находясь в режиме конструктора диалога командой Layout/Tab Order, установить очередность перехода между элементами управления:
1 – Edit1; 2 – Edit2; 3 – Edit3; 4 – Edit4; 5 – Button RUN; 6 – ListBox; 7 – Button CLEAR;
8 – Button OK; 9 – Button Cancel, а для кнопки «RUN» установить свойство «Default».
5)Работа с программой:
Запустить проект и в появившемся диалоговом окне щелкнуть на «ОК»
Появится MessageBox с подсказкой о диапазоне вводимого х1 (рисунок 2):
Щелкнуть «ОК», введите начальное значение аргумента х (поле с подсветкой) и опять щелкнуть на «ОК». По аналогии ввести значения для x2, h, n. Для выполнения задания щелкнуть на «RUN». Щелчок на кнопке «CLEAR» стирает значения в окне вывода.
Индивидуальные задания:
1.
2.
3.
4.
5.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Контрольные вопросы:
1. В чем заключается роль класса CListBox в MFC?
2. Назовите основные методы класса CListBox.
3. Перечислите основные этапы создания списка.