Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
hrustash
3 / 3 / 3
Регистрация: 05.04.2013
Сообщений: 42
1

Видимость членов класса главного окна в дочерних окнах

29.08.2013, 01:28. Просмотров 633. Ответов 3
Метки нет (Все метки)

Доброго времени суток, возникла такая проблема: создаю небольшой MFC проект на базе диалога.
В главном окне есть листбокс, ему, соответственно, отведена переменная типа CListCtrl в классе окна
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CFinanceslg : public CDialogEx
{
// Создание
public:
    CFinanceslg(CWnd* pParent = NULL);  // стандартный конструктор
 
.......
 
public:
    CListCtrl list_charges;     //главный  ----- 
    friend void MainListFulling (CListCtrl&);   //функция для заполнения главного листбокса и только его
    afx_msg void OnBnClickedOk();
    afx_msg void OnBnClickedNewCharge();
};
Далее есть кнопка, при нажатии вызывается дочернее окно, в нем есть свои формы, из которых я получаю некоторую информацию и потом эту информацию нужно вставить в листбокс главного окна по нажатию клавиши ОК дочернего. Вот тут-то и возникла проблема, не знаю как обратиться к переменной листбокса. Она-то паблик, но я полазил по коду и не нашел создания объекта класса CFinanceslg. решил проблему по-корявому, создал указатель и в OnInitDialog-е главного окна присвоил ему адрес своего list_charges.
Но хотелось бы узнать, может есть какое-то адекватное решение

Добавлено через 14 минут
порылся еще немного в файлах, созданных визардом и нашел в одном из .cpp (который не Dlg) файлов вот такую штуку
C++
1
2
CFinanceslg dlg;
m_pMainWnd = &dlg;
как я понял, этот указатель объявлен еще раньше, где-то в файле afxwin.h, но через него все равно не получается обратиться к члену-данному объекта dlg. и этот указатель все равно не виден в .cpp дочернего окна
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 01:28
Ответы с готовыми решениями:

Видимость/невидимость главного окна
Главное окно по нажатию на горячую клавишу должно делаться видимым/невидимым......

Как создать 2 дочерних окна програмно
Помогите пожалуйста как мне сделать что бы при запуске программы уже работали 2...

Вид главного окна приложения MFC
Не большой знаток MFC, однако читаю в интернете инфу возник следующий вопрос....

Сохранить изменение в объекте главного диалогового окна, после того, как второе модальное окно закрывается
Есть главное диалоговое окно и его класс А, производный от класса CDialog, есть...

Вызов деструкторов членов класса
у меня есть класс поля которого тоже классы...при выходе из конструктора...

3
Aloir
219 / 219 / 38
Регистрация: 17.12.2010
Сообщений: 710
29.08.2013, 10:13 2
передайте в дочернию фомру структуру которая отвечает за информацию которая заполняется на форме. а потом обрабатываете эту структуру

и вообще у вас там что то типа:

C++
1
2
3
4
    CChildDlg *d = new CChildDlg(...);
    int ret = d->DoModal();
    d->m_cListBox; //обращаемся к контролу листбокса на дочерней форме, ну или к любой другой 
    delete d;
0
ValeryS
Модератор
7272 / 5526 / 692
Регистрация: 14.02.2011
Сообщений: 18,723
29.08.2013, 17:52 3
Цитата Сообщение от hrustash Посмотреть сообщение
Далее есть кнопка, при нажатии вызывается дочернее окно, в нем есть свои формы, из которых я получаю некоторую информацию и потом эту информацию нужно вставить в листбокс главного окна по нажатию клавиши ОК дочернего.
все не так
в главном диалоге когда вызываешь дочерний ты вызываешь DoModal вот от него и танцуй

типа
C++
1
2
3
4
if(dlg.DoModal()==IDOK)// если нажата кнопка OK
{
 что то делаем 
}
Цитата Сообщение от hrustash Посмотреть сообщение
порылся еще немного в файлах, созданных визардом и нашел в одном из .cpp (который не Dlg) файлов вот такую штуку
все правильно это запустилось приложение и создало главное окно
а оно есть диалог
m_pMainWnd глобальная переменная обращаться можешь из любого места программы
но чтобы достучатся до твоего листбокса
дочерний должен знать как устроен главный диалог
т.е нужно подключить CFinanceslg.h или как он у тебя называется
вот здесь то и кроется засада
запросто можно кросс объявления
1
hrustash
3 / 3 / 3
Регистрация: 05.04.2013
Сообщений: 42
29.08.2013, 22:45  [ТС] 4
ValeryS, спасибо. ранее не использовал возвращаемого значения от функции DoModal, буду знать)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2013, 22:45

Работа с CDialog и изменение членов объекта другого класса
Есть главное диалоговое окно и его класс А, производный от класса CDialog, есть...

Виртуальный режим в дочерних окнах
Для открытия дочернего окна из главного всегда использую следующий код....

MDI: MenuStrip: Меню в дочерних окнах
Столкнулся с такой проблемой: необходимо создать MDI приложение. Начал...


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

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

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