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

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


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

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



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

Visual C++. MFC
Урок 41. Обмен данных с немодальным диалогом

На прошлом уроке мы создали немодальное диалоговое окно, но никакого обмена данными между ним и основным окном нашец программы не было. Сейчас мы это исправим. Откройте второе диалоговое окно в редакторе ресурсов и добавьте на него один edit. Оставьте идентификатор edit'а без изменений. С помощью ClassWizard'а добавьте к edit'у переменную m_sData типа CString (для этого перейдите в ClassWizard'е на вкладку Member Variables, выделите строку IDC_EDIT1 и нажмите на кнопку Add Variable). Кроме edit'а добавьте в диалоговое окно кнопку. Для нее задайте идентификатор IDC_APPLY и надпись на ней - Apply.

Теперь нам надо внести небольшие изменения в код, созданный на прошлом уроке. А именно, в классе CDlg2 второго диалогового окна нам нужен указатель на первое окно (так как мы будем передавать данные не закрыв второе окно - оно же у нас немодальное). Делаем это следующим образом: сначала заводим соответствующую переменную в классе второго диалогового окна:

class CNModalDlg;
 
 class CDlg2 : public CDialog
 
 {
 
 public:
 
     CDlg2(CWnd* pParent = NULL);   // standard constructor
 
     CNModalDlg* m_pDlg; //Указатель на первое окно
 
     ...

Обратите также внимание, что перед определением класса CDlg2 мы добавили строку

class CNModalDlg;
 
 ...

Без нее компилятор будет ругаться - не знаю, мол, что это за тип такой CNModalDlg*.

Далее в существующем конструкторе класса второго диалогового окна мы в эту переменную записываем соответсвующее значение:

#include "NModalDlg.h"
 
 ...
 
 CDlg2::CDlg2(CWnd* pParent /*=NULL*/)
 
     : CDialog(CDlg2::IDD, pParent)
 
 {
 
     ...
 
     m_pDlg=(CNModalDlg*)pParent;
 
 }

Обратите внимание, что мы include'ом включили файл NModalDlg.h (это заголовочный файл для нашего основного окна).

Теперь изменим обработчик для кнопки в первом диалоговом окне:

void CNModalDlg::OnButton1()
 
 {
 
     if(m_pDlg2==NULL){
 
         m_pDlg2=new CDlg2(this);
 
         m_pDlg2->Create(IDD_DIALOG1);
 
         m_pDlg2->ShowWindow(SW_SHOWNORMAL);
 
     }
 
     else{
 
     ...
 
 }

Как вы видите, здесь мы вместо конструктора без параметров вызываем конструктор с параметром this. Тем самым, когда второй диалог создается, в его переменную m_pDlg записывается указатель на первое диалоговое окно.

И, наконец, в обработчик для кнопки Apply добавьте следующий код:

void CDlg2::OnApply()
 
 {
 
     // TODO: Add your control notification handler code here
 
     //Передаем данные из edit'а в переменную m_sData
 
     UpdateData();
 
     //Передаем данные в основное окно
 
     m_pDlg->SetWindowText(m_sData);
 
 }

Запускайте программу и вызывайте немодальное окно. То, что вы в его edit'е напечатаете, появится после нажатия на кнопку Apply в заголовке основного окна.



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

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




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



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


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