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

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


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

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



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Visual C++. MFC
Урок 23. Функции DDX

На прошлом уроке мы с вами создали диалоговое окно. В нем никаких элементов не было. Добавьте в него пару элементов - Edit и CheckBox. Идентификаторы для них оставьте по умолчанию (IDC_EDIT1 и IDC_CHECK1). После этого добавьте в класс CMyDlg пару переменных и методы для чтения и записи этих переменных:

class CMyDlg : public CDialog{ //наш класс - потомок CDialog
 
 public:
 
     CMyDlg(CWnd* pParent=NULL);
 
     // функция обмена данными
 
     virtual void DoDataExchange(CDataExchange* pDX);
 
     void SetStr(CString  sData);  // установить строку
 
     CString GetStr();  // получить строку
 
     void SetCheck(BOOL bCheck);  // установить CheckBox
 
     BOOL GetCheck();  // получить CheckBox
 
 protected:
 
     CString m_sData;    //строковая переменная
 
     BOOL m_bCheck;  //переменная - переключатель
 
 };

Напишите реализацию методов для чтения и записи:

void CMyDlg::SetCheck(BOOL bCheck){
 
     m_bCheck=bCheck;
 
 }
 
 BOOL CMyDlg::GetCheck(){
 
     return m_bCheck;
 
 }
 
 void CMyDlg::SetStr(CString  sData){
 
     m_sData=sData;
 
 }
 
 CString CMyDlg::GetStr(){
 
     return m_sData;
 
 }

Теперь займемся реализацией метода DoDataExchange:

void CMyDlg::DoDataExchange(CDataExchange* pDX){
 
     //обязательно вызываем родительский метод
 
     CDialog::DoDataExchange(pDX);
 
     //обмениваем данные с Edit'ом
 
     DDX_Text(pDX, IDC_EDIT1, m_sData);
 
     //обмениваем данные с CheckBox'ом
 
     DDX_Check(pDX, IDC_CHECK1, m_bCheck);
 
 }

И, наконец, изменяем метод InitInstance:

BOOL CMyApp::InitInstance(){
 
     CMyDlg dlg;
 
     m_pMainWnd = &dlg;
 
     dlg.SetStr("123"); //задаем строку
 
     dlg.SetCheck(TRUE); //задаем переменную-переключатель
 
     dlg.DoModal(); //показываем диалог
 
     ...

Теперь запущенная программа должна выглядеть так:

Диалог New

Таким образом наша программа показывает те значения в контролзах, которые мы и ожидаем.

Даваете теперь обсудим наш код более подробно. Мы ввели в наш класс CMyDlg виртуальный метод DoDataExchange (кстати, не рекомендуется вызывать этот метод напрямую). Если мы хотим, чтобы происходил обмен данных между переменными класса и элементами управления (не только обмен, но и проверка, но об этом в следующем уроке), то мы должны этот метод переопределить. Это мы и делаем в строках

void CMyDlg::DoDataExchange(CDataExchange* pDX){
 
     //обязательно вызываем родительский метод
 
     CDialog::DoDataExchange(pDX);
 
     ...
 
 }

Сюда мы должны вставить вызовы функций DDX_... для всех наших элементов управления. Это мы делаем в строках

    ...
 
     //обмениваем данные с Edit'ом
 
     DDX_Text(pDX, IDC_EDIT1, m_sData);
 
     //обмениваем данные с CheckBox'ом
 
     DDX_Check(pDX, IDC_CHECK1, m_bCheck);
 
     ...

Этих функций достаточно много. Их имена начинаются на DDX (от слова eXchange). Например,

DDX_Text - для обмена текстовыми данными,

DDX_Check - для обмена данными логического типа,

DDX_Radio - для обмена данными типа int с группой радиокнопок,

DDX_Control - для обмена данными типа CWnd с некоторым элементом управления.

Все эти функции могут передавать данные как из переменной в элемент управления, так и в обратную сторону.



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

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




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



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


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