Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

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 более интелектуальней чем базовый.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS