Лабораторная работа №5. Работа с элементом управления «Комбинированный список» (ComboBox)

Цель лабораторной работы: Научиться использовать элемент управления ComboBox,изучить основные методы класса CComboBox, предназначенным для управления данным элементом.

Класс CComboBox

Элемент управления ComboBox представляет собой список ListBox в комбинации с редактором Еdit или надписью Static. Данный элемент называют комбинированным окном. Окно при этом может иметь два состояния: как распахнутое (которое отображается постоянно), так и свернутое (отображается при щелчке на элементе «стрелка вниз»). Элементы списка в окне можно выбирать и тогда они отображаются или в окне редактирования или в окне статического элемента.

Три модификации компонента определяются его свойством «Type» в закладке окна свойств Style. В таблице 1. приведено сравнение этих трех стилей.

Таблица 1. – Сравнение стилей

Стиль Когда отображается ListBox? Что отображается, Еdit или Static?
Simple Всегда Edit
Drop-down После нажатия кнопки со стрелкой Edit
Drop-down list После нажатия кнопки со стрелкой Static

Для управления элементом ComboBox в библиотеки MFC существует класс CСomboBox. Чтобы добавить новую строку в выпадающий список нужно использовать функцию:

int AddString( LPCTSTR lpszItem );

здесь параметр lpszItem – указатель на нуль-терминированную стороку, добавляемую в список. Для очистки списка служит функция:

void ResetContent( );

В списке элемента ComboBox пользователь может выбирать элементы и для того, чтобы определить какой элемент был выбран, нужно воспользоваться функцией:

int GetCurSel( ) const;

Эта функция не принимает параметров и возвращает индекс выбранного элемента, причем индекс начинается с нуля.

Если необходимо из списка по заданному индексу элемента определить его содержимое, то можно воспользоваться следующей функцией:

void GetLBText( int nIndex, CString& rString ) const;

здесь nIndex – индекс элемента, rString – сторока, куда помещается текст.

Пример написания программы

Задание. В поле ввода вводятся последовательно строки и кнопкой «Add» добавляются в поле ComboBox (рисунок 1). Затем щелчком левой клавишей мыши выбирается соответствующая строка (выбранная строка отобразится в верхнем окошке ComboBox). Щелчок на кнопке «RUN» произведет подсчет пробелов в выделенной строке и отобразит результат в поле вывода.

 
  Лабораторная работа №5. Работа с элементом управления «Комбинированный список» (ComboBox) - student2.ru

Для решения задачи необходимо проделать следующие действия:

1)Создать при помощи MFCAppWizard(exe) новый проект типа Dialog based (предварительно выбрав путь и имя).

2) Используя панель Controls нанести на Dialog - 2 элементa типа Edit Box (поле ввода строки и поле вывода), используя Static Text нанести на окно нужные пояснения, 3 – Buttons; и 1 – ComboBox для вывода добавляемых строк. Установить нужные свойства и надписи. Для ComboBox – в закладке Styles: Type->Simple и активизировать Vertical scroll.

3) При помощи ClassWizard через закладку Member Variables: связать поле Edit1 с переменной m_a (тип CString): ClassWizard/Member Variables, сделать щелчок на IDC_EDIT1, щелчок на Add Variable в закладке name: m_a type: CString и нажать «OK»; для поля вывода IDC_EDIT2: name: m_a type: Cstring и в свойствах: Multiline (можно добавить вертикальный скроллинг). Элемент ComboBox связать c m_c, установив Category: Control для данного объекта тип CComboBox, т.е. для данного объекта можно вызывать методы по всей цепи иерархии данного класса MFC.

4) Связать через ClassWizard/Message maps кнопки с событием «один щелчок» и активировать обработчики. Так, для стирания окон вывода в обработчик щелчка на кнопке «Clear» можно вызвать следующий метод:

m_c.ResetContent(); и m_b=””.

Обработчик кнопки «Add» добавляет в поле вывода ComboBox строку, набранную в поле ввода одновременно очищая последнюю.

Его текст:

UpdateData(TRUE);

m_c.AddString(m_a);

m_a="";

UpdateData(FALSE);

}

Обработчик кнопки «RUN» выводит в поле вывода номер выбранной строки и количество пробелов в ней. Текст программы следующий:

CString s1;

int i,j=0;

char str[25];

CComboBox *p=(CComboBox *)GetDlgItem(IDC_COMBO1);

i=p->GetCurSel();

if (i==LB_ERR)

AfxMessageBox("String No SELECT!!!");

else

{

p->GetLBText(i, str);

AfxMessageBox(str);

}

Т.е. объявляем указатель p на элемент ComboBox, через него вызываем метод GetCurSel() для определения номера выбранной строки. Далее контролируем: если выбор строки не сделан, то получаем AfxMessageBox с сообщением об этом. Если же строка выделена, методом GetLBText копируем выделенную строку списка в str и отбражаем ее в AfxMessageBox.

Данный участок программы решает поставленную задачу, т.е. подсчитывает число пробелов в выделенной строке:

int k=strlen(str);

for(int i1=0;i1<k;i1++)

if (str[i1]==' ') j++;

s1.Format("Count of spaceBar's in string №%d is=%d%c%c",i,j,13,10);

m_b=m_b+s1;

UpdateData(FALSE);

}

Вначале текста программы нужно подключить заголовочный файл string.h

4) Находясь в режиме конструктора диалога командой Layout/Tab Order, установить необходимую очередность перехода между элементами управления, поле ввода должно иметь №1.

Индивидуальные задания

1. Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группу с пятью символами.

2. Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран самую короткую группу.

3. Дана строка, состоящая из групп нулей и единиц. Подсчитать количество символов в самой длинной группе.

4. Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы с четным количеством символов.

5. Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством символов.

6. Дана строка, состоящая из букв, цифр, запятых, точек, знаков ”+” и ”-”. Вывести подстроку, которая соответствует записи целого числа ( т.е. начинается со знаков ”+” и ”-” и внутри подстроки нет букв, запятых и точек ).

7. Дана строка, состоящая из букв, цифр, запятых, точек, знаков ”+” и ”-”. Вывести подстроку, которая соответствует записи вещественного числа с фиксированной точкой.

8. Дана строка, состоящая из букв, цифр, запятых, точек, знаков ”+” и ”-”. Вывести подстроку, которая соответствует записи вещественного числа с плавающей точкой.

9. Дана строка символов, состоящая из произвольных десятичных цифр, разделенных пробелами. Вывести на экран числа строки в порядке возрастания их значений.

10. Дана строка символов, состоящая из произвольных десятичных цифр, разделенных пробелами. Вывести на экран четные числа этой строки.

Контрольные вопросы:

1. Чем отличается элемент управления ComboBox от ListBox?

2. Назовите основные методы класса CComboBox.

3. Назовите 3 модификации элемента ComboBox.


Наши рекомендации