Шаг 55 - Что такое CListBox

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

Работаем со старым проектом. Нам надо создать в диалоговом окне список. Вот так.

55_1.gif (7722 b)

Создаем код

Объявляем класс, соответствующий элементу управления в классе диалогового окна.

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

Обмен данными.

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

Создадим дополнительную функцию. Объявим.

class CTestDlg : public CDialog	// класс диалогового окна
{
..............
CListBox m_List; // список
void AfxMessageBox(int i); // показывать int
protected:
..............
};

Реализуем.

void CTestDlg::AfxMessageBox(int i)
{
char t[10]; // буфер
itoa(i,t,10); // перевести число в строку
::AfxMessageBox(t); // показать строку
}

И переопределения действия над кнопкой Send.

void CTestDlg::OnSend()
{
m_List.AddString("Hello"); // добавить строку
AfxMessageBox(m_List.GetCount()); // показать количество
}

Программа в работе.

55_2.gif (6218 b)

Описание

Итак, описываем класс, соответствующий элементу управления, и обмен данными уже не первый раз, не маленькие!.

А вот реализация дополнительной функции требует обсуждения. И хотя с данным ходом программной мысли мы встречались, но выделение в отдельную функцию не настолько невиданно. На мой взгляд, каждый программист работает с определенным уровнем абстракции. И мы с вами работаем с оболочкой вокруг Windows под именем MFC. Эта оболочка позволяет нам абстрагироваться от многих деталей работы самой операционной системы и сосредоточиться на решаемой задаче. При реальном создании приложения нужен еще более высокий уровень абстракции. Вот эта функция и является примером подобного подхода. Мы создали одну функцию, которая является надстройкой над MFC. И мне кажется, что программист именно этим и занимается. Расширяет возможности оболочки. Самое главное, откуда начать старт. Если всё это обдумать получается, что каждый строит свой Extended MFC. Тогда чем занимается Microsoft? И вот на основе этих мыслей я пришел к интересному выводу. Смогу ли я описать все уровни абстракций, которые существуют, например, при получении данных от сервера. Увы нет.

Лирическое отступление закончено. У нас с Вами две функции. OnSend добавляет данные в список. Делается это функцией AddString. Вот её описание.

int AddString( LPCTSTR lpszItem );

Ей нужна только строка. И эту строку она поместит в конец списка. При необходимости вставки в конкретное место есть функция InsertString. После вставки мы получаем количество элементов в списке с помощью GetCount() и выводим на экран для обозрения.

Проверить есть ли выделенная ячейка можно с помощью Если ячейка не выделена, то возврат функции GetCurSel() будет LB_ERR.

Шпаргалка

Объявляем класс, настраиваем DDX, используем функции.


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