Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Урок 41. Обмен данных с немодальным диалогом / Уроки MFC / Visual C++
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*.
Далее в существующем конструкторе класса второго диалогового окна мы в эту переменную записываем соответсвующее значение:
Как вы видите, здесь мы вместо конструктора без параметров вызываем конструктор с параметром 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 в заголовке основного окна.