http://tikitak.narod.ru ---- Главная страница сайта
Шаг 55 - Что такое CListBox
Создание проекта
Работаем со старым проектом. Нам надо создать в диалоговом окне список. Вот так.
Создание кода
Обьявляем класс соответствующий элементу управления в классе диалогового окна.
class CTestDlg : public CDialog
{
.....
protected:
.......
CListBox m_List;
.....
};
Обмен данными
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_List);
}
Дополнительную функцию
void int_AfxMessageBox(int i)
{
char t[10];
itoa(i,t,10);
AfxMessageBox(t);
}
И переопределения действия над двумя дургими кнопками
void CTestDlg::OnSend()
{
m_List.AddString("Hello");
int_AfxMessageBox(m_List.GetCount());
}
void CTestDlg::OnTest()
{
if (m_List.GetCurSel()!=LB_ERR ) m_List.DeleteString(m_List.GetCurSel());
else AfxMessageBox("Not Select");
}
Описание
Итак описываем класс, соответсвующий элементу управления, и обмен данными уже не первый раз, не маленькие :-).
А вот реализация дополнительной функции требует обсуждения. И хотя с данным ходом программной мысли мы встречались, но выделение в отдельную функцию не настолько невиданно. На мой взгляд каждый программист работает с определенным уровнем абстракции. И мы с вами работаем с оболочкой вокруг Windows под именем MFC. Эта оболочка позволяет нам абстрагироваться от многих деталей работы самой операционной системы и сосредоточиться на решаемой задаче. При реальном создании приложения нужен еще более высокий уровень абстракции. Вот эта функция и является примером подобного подхода. Мы создали одну функцию, которая является надстройкой над MFC. И мне кажется, что программист именно этим и занимается. Расширяет возможности оболочки. Самое главное откуда начать старт. Если всё это обдумать получается, что каждый строит свой Extended MFC. Тогда чем занимаеться Microsoft ? :-) И вот на основе этих мыслей я пришол к интересному выводу. Смогу ли я описать все уровни абстракций, которые существуют, например, при получении данных от сервера. Увы нет.
Не обращайте внимания. У меня сегодня голова болит, а такое в нормальном состоянии на ум не придет :-)
Лирическое отступление закончено. У нас с Вами две функции. OnSend добавляет данные в список. Делается это функцией AddString. Вот её описание.
int AddString( LPCTSTR lpszItem );
Ей нужна только строка. И эту строку она поместит в конец списка. При необходимости вставки в конкретное место есть функция InsertString.
После вставки мы получаем количество элементов в списке с помощью GetCount() и выводим на экран для обозрения.
В OnTest мы сначала проверяем есть ли выделенная ячейка в помошью GetCurSel и если выделенная есть, то удаляем с помощью DeleteString. Если ячейка не выделена, то возврат функции GetCurSel будет LB_ERR.
Компилируйте запускайте и пробуйте.
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|