Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
6 / 6 / 3
Регистрация: 30.10.2014
Сообщений: 44

Mfc переключение диалоговых окон

03.11.2014, 13:58. Показов 3133. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
хочу сделать программу, в которой при нажатии на кнопку основное окно закрывается и открывается второе окно. во втором окне так же есть кнопка для закрытия уже второго окна и открытия первого.
так как при закрытии главного окна закрывается вся программа, то, как решение, я его просто скрываю.
вот непосредственно код:
C++
1
2
3
4
5
6
7
void CMFCApplication5Dlg::OnBnClickedButton2()
{
    ShowWindow(SW_HIDE);
    CDialog2* m_pSimpleDlg2 = new CDialog2();
    m_pSimpleDlg2->Create(IDD_DIALOG2, this);
    m_pSimpleDlg2->ShowWindow(SW_SHOW);
}
и в принципе работает, но возникает 2 вопроса:
1)как сделать, чтобы при закрытии второго окна на крестик, закрывалась вся программа?
2)как сделать, чтобы при переключении окна появлялись там же, где было выключаемое окно?

p.s. можно конечно сделать основное окно невидимым и переключаться между двумя дополнительными, тогда даже новое окно будет появлятся на позиции старого, но количество проблем не уменьшается:
1)как сделать, чтобы при закрытии дополнительного окна на крестик, закрывалась вся программа?
2)как скрыть основное окно, чтобы оно не моргнуло при запуске?(при прописывании скрытия в OnPaint успевает появиться и вполне заметно, в других местах команда эта эфекта не даёт)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.11.2014, 13:58
Ответы с готовыми решениями:

MFC внешний вид диалоговых окон
Создаю визардом приложение MFC на основе диалоговых окон. При запуске отладки внешний вид окна и кнопок не соответствует теме рабочего...

Несколько диалоговых окон!
Добрый день! Проблема в следующем : создаю новый класс для нового окна. Вызываю это новое окно кнопкой которая находится в главном...

Создание окон в среде MFC
Продолжаю разбираться в MFC... A) Если не сложно объясните в чём особенность, преимущества создания окна в следующих способах: 1)...

12
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,864
03.11.2014, 14:02
Цитата Сообщение от bycicle Посмотреть сообщение
как скрыть основное окно, чтобы оно не моргнуло при запуске?
наверно создавать невидимым
не использовать VS_VISIBLE
0
6 / 6 / 3
Регистрация: 30.10.2014
Сообщений: 44
03.11.2014, 14:09  [ТС]
вроде не видел у себя такого.
в свойствах окна было чтото про видимость, но оно не помогало, а вот почемуто при включении многослойности оно не отображалось.
но всё равно ещё остаются другие проблемы, более важные
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,864
03.11.2014, 14:42
Цитата Сообщение от bycicle Посмотреть сообщение
вроде не видел у себя такого.
А вот это?
Цитата Сообщение от bycicle Посмотреть сообщение
m_pSimpleDlg2->ShowWindow(SW_SHOW);
http://vsokovikov.narod.ru/New... window.htm
Цитата Сообщение от bycicle Посмотреть сообщение
но всё равно ещё остаются другие проблемы, более важные
трудно их решить не зная задачи
скажи чем не устраивают закладки? визарды?
0
6 / 6 / 3
Регистрация: 30.10.2014
Сообщений: 44
03.11.2014, 14:55  [ТС]
ну с tab'ом пробовал сделать, в итоге забил, так как ничего не выходило, к тому же там другая проблема есть, так как окна должны быть разного размера

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
А вот это?
Сообщение от bycicle m_pSimpleDlg2->ShowWindow(SW_SHOW);
так это относится к дополнительному окну, а не основному

Добавлено через 37 секунд
а про визарды ничего не знаю, я вообще нуб в проге, особенно с mfc
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,864
03.11.2014, 15:16
Цитата Сообщение от bycicle Посмотреть сообщение
так как окна должны быть разного размера
негоже это, когда размеры скачут, пользователи обижаются
на крайняк размер у окна можно менять
Цитата Сообщение от bycicle Посмотреть сообщение
ну с tab'ом пробовал сделать
посмотри здесь
http://www.firststeps.ru/mfc/steps/r.php?319
и еще несколько шагов
Цитата Сообщение от bycicle Посмотреть сообщение
а про визарды ничего не знаю,
прочитай про классы CPropertySheet CPropertyPage
http://msdn.microsoft.com/ru-r... 93d2w.aspx

Добавлено через 3 минуты
http://www.firststeps.ru/mfc/source/r.php?88
http://www.firststeps.ru/mfc/source/r.php?89
http://www.firststeps.ru/mfc/source/r.php?86
1
6 / 6 / 3
Регистрация: 30.10.2014
Сообщений: 44
03.11.2014, 15:21  [ТС]
спасибо)
если бы знал как изменять размер окна, то сделал бы с одним дилогом(ну с 2мя дочерними понятно)
а ещё вопрос, а для модального окна можно как-нибудь положение задать?
и кстати, всем известная программа калькулятор при переходе на инженерный вид меняет свой размер
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,864
03.11.2014, 15:32
Цитата Сообщение от bycicle Посмотреть сообщение
а для модального окна можно как-нибудь положение задать?
SetWindowPos
меняет и положение и размер
http://msdn.microsoft.com/ru-r... zfz6d.aspx
1
6 / 6 / 3
Регистрация: 30.10.2014
Сообщений: 44
03.11.2014, 17:07  [ТС]
в принципе знаю как задавать положение и как получать координаты, но вот не знаю как передать из одноко координаты в другое.
буду благодарен за ответ
вроде со всем остальным разобрался

Добавлено через 6 минут
а вот ссылки к сожалению не помогли(правда мсдн ещё не глянул), попробовал 2 или 3 примера оттуда и они не рабочие, вылазят ошибки, которые я без понятия как исправить. хотя всё же на том сайте нашёл подсказку, которая дала идею с моими окнами разобраться. вот осталось только както с положением окон разобраться

Добавлено через 7 минут
однако не говори гоп, пока не перепрыгнешь. на модальном окне у меня проблема с инициализацией, то есть например не знаю как записать значения в комбобокс

Добавлено через 26 секунд
в смысле чтобы при открытии окна они уже висели в том комбобоксе
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,864
03.11.2014, 17:27
Цитата Сообщение от bycicle Посмотреть сообщение
в смысле чтобы при открытии окна они уже висели в том комбобоксе
есть такая функция InitDialog в ней и заполняй
Цитата Сообщение от bycicle Посмотреть сообщение
но вот не знаю как передать из одноко координаты в другое.
буду благодарен за ответ
не понял что надо
но сдвигать можно и не свое окно
например
C++
1
2
3
CRect rct;
myWin.GetWindowRect(&rct);
myWin.SetWindowPos(wndTop,rct.left+100,rct.bottom,rct.Height(),rct.Widht(),SWP_SHOWWINDOW);
писал по памяти, возможны ошибки
1
6 / 6 / 3
Регистрация: 30.10.2014
Сообщений: 44
03.11.2014, 18:12  [ТС]
BOOL CDialog2::InitDialog()
прописываю так и прописываю в хеадере функцию, но инициализация не пашет
а прописываю
BOOL CDialog2::OnInitDialog()
тогда второе окно совсем не запускается


а по поводу позиции окон. я просто хочу если пользователь перетащил одно окно, то другое окно запустится в том же месте, а не по центру экрана
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,864
03.11.2014, 19:01
Цитата Сообщение от bycicle Посмотреть сообщение
а прописываю
BOOL CDialog2::OnInitDialog()
как прописываешь?
по правильному его нужно через "волшебник "
выделяешь класс своего диалога, правой кнопкой Свойства, а там, не помню точно, или виртуальную функцию переопределить ,вкладка виртуал, или обработчик сообщения WM_INITDIALOG

Добавлено через 3 минуты
Цитата Сообщение от bycicle Посмотреть сообщение
перетащил одно окно, то другое окно запустится в том же месте, а не по центру экрана
можно вложить в диалог координаты окна
а потом как то так
C++
1
2
3
4
CRect rct;
this->GetWindowRect(&rct);
CDialog2 dlg;
dlg.rectWin=rct;
а потом в :OnInitDialog() второго диалога двигаешь окно
1
6 / 6 / 3
Регистрация: 30.10.2014
Сообщений: 44
03.11.2014, 19:03  [ТС]
спасибо, потом попробую)
кстати, SetWindowPos, не много подругому оказалась, но за неё тоже спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2014, 19:03
Помогаю со студенческими работами здесь

Несколько дочерних окон в SDI MFC
Всем доброе время суток! Я только начинаю изучать С++ и MFC. Сразу появился вопрос - как разбить окно на несколько частей и в каждой...

MFC - нужно ли самому следить за удалением подчиненных окон?
Вопрос такого сорта... class CChildWindow : public CWnd { CChildWindow(CWnd* parent); } CMainFrame::CMainFrame()//главное окно...

Вывод картинки (из файла jpg) на весь экран, поверх всех окон в MFC
Если ли класс у mfc для вывода изображений из файла,на весь экран? Чтобы можно было показывать слайд-шоу из выбранных файлов(т.е....

Создание диалоговых окон
Доброго времени суток, есть полное непонимание в создание диалогового окна... Как я понимаю, для создания диалогового окна необходимо...

Изменение диалоговых окон
Доброго времени суток. Как вы уже поняли, меня интересуют диалоговые окна. Учитель по предмету "Операционные системы" ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru