Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение данных из дочернего диалога в процедуру обработки главного окна  (Прочитано 27161 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Combat
Гость
« : 19-01-2007 12:58 » new

Подскажите пожалуйста как получить данные из диалога (из елементов диалога) в процедуру обработки главного окна программы, не используя глобальных переменных для пересылки этих данных.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 19-01-2007 13:47 » 

Какие данные? Просто текст? Или события? Проект MFC?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Combat
Гость
« Ответ #2 : 19-01-2007 13:52 » 

ну там, в елементы диалога (например edit поля) пользователь вводит данные, эти данные после закрытия диалога нужно использовать в другом месте (в данном случае в процедуре обработки сообщений главного окна). Так вот получить эти данные как без считывания их в глобальные переменные, а потом оттуда в нужное место?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 19-01-2007 14:39 » 

Их можно считать в поля данных самого Диалога, а потом затребовать их у диалога в месте вызова

Код:

void CMainFrame::ShowParamDialog()
{

     CMyParamDlg dlg;
     if(dlg.DoModal()==IDOK)
     {
          dlg.GetValueX();
          dlg.GetValueY();
...

Обменивать данные с контролами лучше всего с помощью DDX_ макросов.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Combat
Гость
« Ответ #4 : 19-01-2007 15:04 » 

Наверно вопрос тупой, но все же : без MFC это можно сделать?
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #5 : 19-01-2007 16:27 » 

можно, вплоть до посыла окну контрола месаги WM_GETTEXT...
ну или GetWindowText
Записан

Удачного всем кодинга! -=x[PooH]x=-
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 19-01-2007 16:31 » 

Combat, создай структуру с нужными переменными. Передай указатель на экземпляр структуры в модальный диалог.
 Диалог в InitDialog() раскидывает данные по своим окошкам, а после закрытия - собирает обратно из окошек в структуру. Лично мне кажется, что это самое удобное и гибкое способо )
Записан

Combat
Гость
« Ответ #7 : 19-01-2007 16:58 » 

а как передать этот указатель в функцию обработки диалога, если у нее спецификация однозначноопределенная?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 19-01-2007 17:01 » 

объяви в классе диалога член-переменную указатель на структуру. А ещё лучше - член-переменную такого типа, тогда ещё гибче будет - даже когда закрыли диалог, ты ещё можешь потом принят решение - скопировать данные из диалога или не делать этого
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 19-01-2007 17:04 » 

Код:
struct myStruct
{
  ....
};

class CMyDialog::....
{
public: //хотя лучше не паблик, а сделать процедуру для настройки
          //приватной переменной
  myStruct  m_data;
};

Код:
//пример

myStruct data;

//инициализируем
//data. ... =......
//data. ... =......

CMyDialog dlg;

dlg.m_data=data;
dlg.DoModal();

//берём введённые данные
data=dlg.m_data;
« Последнее редактирование: 19-01-2007 17:10 от Алексей1153 » Записан

Combat
Гость
« Ответ #10 : 19-01-2007 17:07 » 

поидее тут CMyDialog - производное от MFC диалога?, или я чтото путаю?
« Последнее редактирование: 19-01-2007 17:12 от Combat » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 19-01-2007 17:15 » 

Combat, ну, тут - да , но ты же можешь написать свой диалог ) Если честно, я только на MFC писал, поэтому не подскажу тут..

я же пример только показал,  использовал некоторые структуры и классы, а не конкретно классы MFC
« Последнее редактирование: 19-01-2007 17:17 от Алексей1153 » Записан

Combat
Гость
« Ответ #12 : 19-01-2007 17:17 » 

все равно большое СПАСИБО, просто я создавал тему в API разделе, думал может кто подскажет как это сделать без MFC, а только с помощью API...
« Последнее редактирование: 19-01-2007 17:33 от Combat » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #13 : 19-01-2007 20:56 » 

Нууу вобще-то этот раздел и для того и для другого. Поэтому я тебя сразу спросил про MFC. А MFC - это просто ООП оболочка для WinAPI. К тому же исходники открыты - смотри, пользуйся.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Combat
Гость
« Ответ #14 : 19-01-2007 21:52 » 

То есть чисто на API без использование MFC или глобальных переменных это зделать нельзя?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 20-01-2007 05:43 » 

Combat, можно ) Ведь MFC же написали на АПИ )
Записан

PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #16 : 20-01-2007 07:19 » 

То есть чисто на API без использование MFC или глобальных переменных это зделать нельзя?

Почему нельзя? Ты мой пост проигнорировал? Самое наичистейшее API Улыбаюсь
Записан

Удачного всем кодинга! -=x[PooH]x=-
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 20-01-2007 10:17 » 

PooH, он имел ввиду ПОСЛЕ закрытия диалога. Если я конечно правильно понял. Те Диалог открыли-закрыли, значения отправили.

Combat,  ты открываешь диалог в основном цикле обработки сообщений. В этом месте сделай объект, который открывает диалого и сохраняет значение контролов, а потом опроси этот объект.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Combat
Гость
« Ответ #18 : 20-01-2007 17:26 » 

так сохранять значения из контролов нада поидее в процедуре обработки сообщений диалога (ведь после закрытия диалога уже их нет в памяти) и в ней записывать их в поля объекта, создающего диалог...(может ошибаюсь).. так доступ к членам объекта поидее у меня нету из этой процедуры, она же не является членом объекта?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 20-01-2007 17:55 » 

Combat, диалог после закрытия ещё никуда не делся, пока экземпляр диалога не вышел из области видимости, он просто становится невидим. Поэтому можно работать с его переменными-членами.
А вот в контролы диалога лазить из другого класса не стОит Улыбаюсь . Диалог должен сам при получении сообщения WM_CLOSE собрать инфу из контролов в переменные-члены
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 21-01-2007 02:59 » 

Совершенно верно. При закрытии диалога происходит только разрушение окна, но не удаление объекта. В этом идея и заключается - при закрытии окна сохранить данные в объекте, а потом их уже можно потребовать у объекта.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Combat
Гость
« Ответ #21 : 21-01-2007 10:07 » 

да, я это понимаю, но у меня нет объекта диалога, и соответствующей функции создания диалогового окна.. и т. д., ведь я хочу написать без MFC, у меня есть только функция DialogBox, содающее модальное диалоговое окно, в параметрах которой указываеться функция обработки сообщений диалогового окна, которую потом вызывает винда, так вот проблема в том, что когда эта функция(обработки сообщений диалога) закрывает диалоговое окно, то и пропадают все значения в контролах, поэтому получается что считывать значения с контролов нужно именно в этой функции, а куда их считывать, если из этой функции есть доступ только к глобальным переменным,... если ощибаюсь в рассуждениях поправте пожалуйста....
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 21-01-2007 11:38 » 

Combat, покажи, как у тебя класс твоего диалога выглядит ?
Записан

Combat
Гость
« Ответ #23 : 21-01-2007 12:00 » 

у меня нету класса диалога
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #24 : 21-01-2007 12:16 » 

тогда покажи, как ты его создаёшь то...
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #25 : 21-01-2007 12:45 » 

у меня нету класса диалога

Ну дык сделай! А внутри этого объекта вызывай DialogBox.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines