Работаем со старым проектом. Нам надо создать в диалоговом окне список. Вот так.
Объявляем класс, соответствующий элементу управления в классе диалогового окна.
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()); // показать количество
}
Программа в работе.
Итак, описываем класс, соответствующий элементу управления, и обмен данными уже не первый раз, не маленькие!.
А вот реализация дополнительной функции требует обсуждения. И хотя с данным ходом программной мысли мы встречались, но выделение в отдельную функцию не настолько невиданно. На мой взгляд, каждый программист работает с определенным уровнем абстракции. И мы с вами работаем с оболочкой вокруг Windows под именем MFC. Эта оболочка позволяет нам абстрагироваться от многих деталей работы самой операционной системы и сосредоточиться на решаемой задаче. При реальном создании приложения нужен еще более высокий уровень абстракции. Вот эта функция и является примером подобного подхода. Мы создали одну функцию, которая является надстройкой над MFC. И мне кажется, что программист именно этим и занимается. Расширяет возможности оболочки. Самое главное, откуда начать старт. Если всё это обдумать получается, что каждый строит свой Extended MFC. Тогда чем занимается Microsoft? И вот на основе этих мыслей я пришел к интересному выводу. Смогу ли я описать все уровни абстракций, которые существуют, например, при получении данных от сервера. Увы нет.
Лирическое отступление закончено. У нас с Вами две функции. OnSend добавляет данные в список. Делается это функцией AddString. Вот её описание.
int AddString( LPCTSTR lpszItem );
Ей нужна только строка. И эту строку она поместит в конец списка. При необходимости вставки в конкретное место есть функция InsertString. После вставки мы получаем количество элементов в списке с помощью GetCount() и выводим на экран для обозрения.
Проверить есть ли выделенная ячейка можно с помощью Если ячейка не выделена, то возврат функции GetCurSel() будет LB_ERR.
Объявляем класс, настраиваем DDX, используем функции.