C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 208 - CStringArray и CListBox / MFC шаг за шагом / Visual C++

Шаг 208 - 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; i < csArray.GetSize();i++)
  {
	st=csArray[i];
	cl->AddString(st);
  }
}
else
{
	int iSize;
	iSize=cl->GetCount();
	csArray.RemoveAll();
	for (int i=0;i < iSize;i++)
	{
		cl->GetText(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 более интелектуальней чем базовый.


| |
Автор Каев Артем.
[AD]