![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
CStringArray и CListBox / - Ctrl, - View, ListBox, ComboBox / Элементы управления |
![]() |
CStringArray и CListBox.По смыслу эти два класса похожи. И тот и другой умеет хранить строки. Только один это элемент графического интерфейса, а другой контейнер для строк. Наша задача научиться обмениваться данными между ними вручную. То есть не используя DDX, а путем создания нашей функции. Итак, создаем приложение на основе диалогового окна с именем TestString. Помещаем на него элемент управления CListBox и связываем с ним класс (Control) вот так. class CTestStringDlg : public CDialog { ................. // Dialog Data //{{AFX_DATA(CTestStringDlg) enum { IDD = IDD_TESTSTRING_DIALOG }; CListBox m_ListBox; ................... Там же создаем массив на основе класса CStringArray. class CTestStringDlg : public CDialog { // Construction ...................... public: CStringArray csArray; ....................... Теперь создадим функцию передачи строк в элемент управления и из него. class CTestStringDlg : public CDialog { // Construction public: void TransferData(CListBox* cl, BOOL blGoy); CStringArray csArray; ........... И ее реализация void CTestStringDlg::TransferData(CListBox* cl, BOOL blGoy) { CString st; if (blGoy) { for (int i=0; iAddString(st); } } else { int iSize; iSize=cl->GetCount(); csArray.RemoveAll(); for (int i=0;iGetText(i,st); csArray.Add(st); } } Как видите при установке флага blGoy данные либо пересылаются в массив, либо из него. Теперь нам надо дописать код в OnInitDialog для того, чтобы инициализировать набор строк при запуске диалога: //////////////////////////////// // CTestStringDlg message handlers BOOL CTestStringDlg::OnInitDialog() { CDialog::OnInitDialog(); ........... // TODO: Add extra initialization here csArray.Add("Hello"); csArray.Add("Word"); TransferData(&m_ListBox,TRUE); return TRUE; // return TRUE unless you set the focus to a control } И перегрузка нажатия на кнопку для возврата назад. void CTestStringDlg::OnOK() { TransferData(&m_ListBox,FALSE); CDialog::OnOK(); } Вот имея такой код, например, можно создать свой класс на основе CListBox более интелектуальней чем базовый.
|
![]() |
![]() |
![]() |
|