С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
Arem
0 / 0 / 0
Регистрация: 24.01.2012
Сообщений: 14
1

Как получить доступ к функциям главного диалога из немодального?

07.02.2012, 00:14. Просмотров 3940. Ответов 10
Метки нет (Все метки)

//Всем доброго времени суток

Подскажите пожалуйста, как получить доступ к функциям основного диалога из немодального?

/*
Создаю указатель на главный диалог(класс главного диалога)
как "прибить" его к главному окну?
*/
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2012, 00:14
Ответы с готовыми решениями:

Получение доступа к функциям диалога из другого потока (mfc)
Всем доброго дня Возникла такая проблема. В классе диалогового окна создаем...

Доступ к объекту диалога
никак не разберуся, вот есть у нас автоматически сформированное диалоговое...

MFC: получить HWND диалога
Есть моя программка-диалог на MFC, и есть код на С, выкачивающий нестандартное...

Как получить доступ к информации находящейся в документах ?
Может кто-нибудь подскажет, каким путем сделать задачку на Visual C++6: В MDI...

Как получить доступ к элементам формы из созданного класса?
Всем доброго времени суток!:help: Скажите, пожалуйста, как мне обратиться к...

10
-=ЮрА=-
Заблокирован
Автор FAQ
07.02.2012, 13:38 2
Цитата Сообщение от Arem Посмотреть сообщение
Подскажите пожалуйста, как получить доступ к функциям основного диалога из немодального?
- передавать в немодальный диалог данные из основного и обрабатывать их в соотв функциях.
0
gustav21
20 / 20 / 4
Регистрация: 23.10.2009
Сообщений: 139
07.02.2012, 14:00 3
Когда создаешь немодальное окно, в конструктор добавь свой указатель, а при вызове конструктора передавай туда this (это будет указатель на родительское окно, ты же из него создаешь этот немодельный диалог)
0
Arem
0 / 0 / 0
Регистрация: 24.01.2012
Сообщений: 14
07.02.2012, 16:28  [ТС] 4
Цитата Сообщение от gustav21 Посмотреть сообщение
Когда создаешь немодальное окно, в конструктор добавь свой указатель, а при вызове конструктора передавай туда this (это будет указатель на родительское окно, ты же из него создаешь этот немодельный диалог)
Уважаемый, gustav21. Спасибо за совет. У меня есть этот указатель, но... Я создаю его в главном диалоге, он создает мне немодальный диалог. Вопрос же следующий:
как получить (если хотите через него, вобщем мне любым способом подойдет) доступ к переменным и функциям, созданным в главном диалоге.

Ситуация следующая: в главном диалоге есть несколько функций и переменных, работающих с файлами(хотя это не важно с чем), они занимают довольно много памяти. Целесообразно не прописывать их сызнова в файлах нового(немодального) диалога, а использовать уже готовыми(синтаксис тот же, всё устраивает). Как к ним обратится??? Если знаете, помогите пожалуйста.

Добавлено через 3 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- передавать в немодальный диалог данные из основного и обрабатывать их в соотв функциях.
Спасибо за совет, логично. Вопрос: КАК? Если есть пример, сбросьте пожалуйста, или хотя-бы несколько рабочих строчек приведите. Так непонятно... Может Вы не поняли вопроса... Может я неправильно сформулировал, но вещь, что Вы написали, очевидна, а пользы мне от неё, увы, никакой...

Я начинающий, поэтому, если есть возможность и время, не сочтите за труд.
Заранее благодарен,- с уважением, Arem.
0
gustav21
20 / 20 / 4
Регистрация: 23.10.2009
Сообщений: 139
07.02.2012, 16:47 5
У немодального окна есть конструктор, добавь в спмсок параметров этого конструктора еще один параметр типа "указатель на объект класса главного диалога" ... Далее, в том месте (в главном диалоге), где создается немодальное окно (по кнопке или по меню или как-то по-другому) ты же как-то создаешь окно? Значит вызываешь конструктор, так вот, вызывая конструктор, передавай в него в качестве параметра еще один, новый созданный параметр (см выше), а значение этого параметра будет this (так как ты находишься в главном окне, то this указывает на него). В немодальном окне определи переменную типа укаатель на класс главного окна и в конструкторе присваивай ей значение нового параметра. Все, теперь у тебя есть переменная указатель, ссылающийся на главное окно, и ты можешь через него обращаться ко всем ПАБЛИК переменным главного окна.

Добавлено через 7 минут
Вот примерный код создания окна:
C++
1
2
НемодальноеОкно* Modless = new НемодальноеОкно(..., this);
Modless->Create(...);
Вот примерный фрагмент класса немодального окна:
C++
1
2
3
4
5
6
7
8
9
class НемодальноеОкно
{
   НемодальноеОкно(..., ГлавноеОкно* mw)
   {
       MainWin = mw;
   }
 
   ГлавноеОкно* MainWin;
}
теперь ты можешь обращаться к членам класса ГлавноеОкно примерно так:
C++
1
2
Значение1 = MainWin->Поле1;
Значение2 = MainWin->Поле2;
1
-=ЮрА=-
Заблокирован
Автор FAQ
07.02.2012, 17:02 6
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Arem, раз уж ты просил вот тебе простой MFC проект с немодальным окном. Суть приложения в следующем - сразу создаётся два окна - основное и немодальное дочернее(активны оба). В основном окне пишем текст и жмём кнопку Передать данные в немодальное окно и сразу же видим их в поле немодального окна. Как строить на основе этого что-то ещё решай сам - принцип я тебе показал...

Вот и весь код(верней его почти нет)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void CNoModalDlg::OnOK() 
{
    // TODO: Add extra validation here
    UpdateData(true);//ÑîáðГ*ëè Г¤Г*Г*Г*ûå ГЁГ§ 2-ГЈГ® îêГ*Г*
    if(pWnd)
    {
        pWnd->ShowWindow(SW_HIDE);
        pWnd->str = m_edit1;
        pWnd->ShowWindow(SW_SHOW);
    }
    //CDialog::OnOK();
}
 
void CNoModalDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
    CDialog::OnShowWindow(bShow, nStatus);
    
    // TODO: Add your message handler code here
    if(!pWnd)
        AfxMessageBox("ГЋГёГЁГЎГЄГ* ñîçäГ*Г*ГЁГї ýêçåìïëÿðГ* 2-ГЈГ® îêГ*Г*");
    else
    {
        pWnd->Create(MAKEINTRESOURCE(IDD_SECONDFORM_DIALOG),NULL);
        pWnd->ShowWindow(SW_SHOW);
    }
}
 
void SecondForm::OnShowWindow(BOOL bShow, UINT nStatus) 
{
    CDialog::OnShowWindow(bShow, nStatus);
    
    // TODO: Add your message handler code here
    m_edit1 = str;
    UpdateData(false);
}
2
Миниатюры
Как получить доступ к функциям главного диалога из немодального?  
Вложения
Тип файла: rar NoModal.exe.rar (3.9 Кб, 77 просмотров)
Тип файла: rar NoModal_VS6.0_project.rar (10.1 Кб, 144 просмотров)
Arem
0 / 0 / 0
Регистрация: 24.01.2012
Сообщений: 14
07.02.2012, 18:18  [ТС] 7
Юра, спасибо большое.
Пример рабочий, всё ОК. Есть вопрос: можно-ли исполнять ф-ции главного диалога в немодальном, или обязательно только в главном.

Просто мне нужно не только из главного значения вытянуть(только одно), а и использовать функции, написанные в главном. Просто обработчик на кнопку на вспомогательном диалоге должен вызывать расчет данных, из главного, а графики рисовать уже во вспомогательном. Так переключаться не дело(((.
0
-=ЮрА=-
Заблокирован
Автор FAQ
07.02.2012, 18:23 8
Цитата Сообщение от Arem Посмотреть сообщение
Юра, спасибо большое.
Пример рабочий, всё ОК. Есть вопрос: можно-ли исполнять ф-ции главного диалога в немодальном, или обязательно только в главном.
Просто мне нужно не только из главного значения вытянуть(только одно), а и использовать функции, написанные в главном. Просто обработчик на кнопку на вспомогательном диалоге должен вызывать расчет данных, из главного, а графики рисовать уже во вспомогательном. Так переключаться не дело(((.
-

Arem, упорно меня не слушаешь или игнорируешь - пиши функции обработки как члены класса немодального диалога, а из главного лишь передавай значения, ну что тут сложного???На крайняк возьми объяви функции обработки как глобальные и не мучайся...
1
Arem
0 / 0 / 0
Регистрация: 24.01.2012
Сообщений: 14
07.02.2012, 18:44  [ТС] 9
gustav21, попробовал, видимо что-то пишу не так...( Не работает.
0
gustav21
20 / 20 / 4
Регистрация: 23.10.2009
Сообщений: 139
07.02.2012, 18:51 10
Arem, приведи код и ошибки, посмотрим что там не работает

Добавлено через 1 минуту
А вообще, конечно, грамотнее делать, как советует -=ЮрА=-
1
Arem
0 / 0 / 0
Регистрация: 24.01.2012
Сообщений: 14
07.02.2012, 21:46  [ТС] 11
Цитата Сообщение от gustav21 Посмотреть сообщение
Arem, приведи код и ошибки, посмотрим что там не работает

Добавлено через 1 минуту
А вообще, конечно, грамотнее делать, как советует -=ЮрА=-
gustav21, спасибо огроменное за помощь и понимание. Я сделал то, что хотел. Получил доступ к переменной (одной, но необходимой) из главного диалога. Обновляю её значение как-раз сразу же после создания немодального диалога. Затем через extern объявил необходимые функции. Вроде-бы работает.(По крайней мере не вылетает, а чуть позже проверю.)
Код приводить не буду, за ненадобностью (времени мало очень, надо писать дальше...)
Честно говоря, даже не ожидал, что откликнется кто. Снимаю шляпу.
0
07.02.2012, 21:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2012, 21:46

Как получить доступ к функциям bass.dll
Подскажите как подключить dll bass скачал ее и как ее подключить в проекте что...

Как получить доступ к функциям драйвера печати?
Добрый день. Как получить доступ к функциям драйвера печати? Мне необходимо...

Как можно упростить доступ к функциям внутри плагина
Допустим есть плагин: (function($){ //управение каталогом товаров var...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru