Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обмен данными с диалогом, MFC 
:(
    Опции темы
devmstr
Дата 4.3.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Я новичок в MFC.
Цель программы следующая. Главное окно содержит меню. Из него вызывается диалоговое окно, содержащее Edit и кнопку. При закрытии окна данной кнопкой значение поля Edit должно стать Caption главной формы.
Вызов диалога:
Код

CDlg dlg;
dlg.DoModal();
sString    =    dlg.m_sString;
SetWindowText(sString); 


Кнопка просто закрывает окно посылая WM_CLOSE
Сейчас приложении работает так. После вызова диалога и работой с Edit, если надать Enter окно закрывается. И Caption меняется. Но почему оно закрывается. Кнопка здесь не причем. Я специально отключал кнопку. Все равно по Enter диалог закрывается.
Если закрыть диалог используя кнопку, то Caption не меняется.
Как я понимаю синхронизация переменной и значения Edit происходит при вызове void CDlg::DoDataExchange(CDataExchange* pDX).
Так при нажатии Enter он вызывается, а при нажатии на кнопке нет.
Когда вообще DoDataExchange должно вызыватся? Нужно ли его вызывать вручную?
Сейчас решил проблему вызывая UpdateData(true); при закрытии окна. Правильно ли я сделал?
Полный код программы:
Code


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Earnest
Дата 4.3.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(devmstr @ 4.3.2006, 13:52 Найти цитируемый пост)
Все равно по Enter диалог закрывается.

Таково поведение диалога по умолчанию. По Enter вызывается default-обработчик, а по умолчанию это OnOk.

Цитата(devmstr @ 4.3.2006, 13:52 Найти цитируемый пост)
а при нажатии на кнопке нет.

А кнопка у тебя какой идентификатор имеет? Чтобы было как ты хочешь, нужно присвоить стандартный ид-р IDOK.
Каждая кнопка (точнее ее идентификатор) - это команда. Команде нужен обработчик. Есть 2 стандартных обработчика, которые действуют по умолчанию OnOk и OnCancel, для кнопок IDOK и IDCANCEL, соответственно. Все остальное надо писать самому.



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.4299 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.