Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переход между диалоговыми окнами, Вопрос нубский, но может кто снизойдет;) 
:(
    Опции темы
Hawkmoth
Дата 19.5.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрыый день всем участникам форума. Вот решил освоить VC++, и в числе прочих нубский трудностей столкнулся с такой проблемой: приспичило мне натворить программку, состоящую из трех диалоговых окон, два из которых взаимоисключающие. Проще говоря, дело обстоит так: пользователь запускает ехе, видит перед собой серое окошко с двумя радиокнопками, на одну из которых он должен изволить кликнуть. Затем предполагается, что он жмет на большой "OK" в этом же окошке, и в зависимости от выбранного radiobutton открывается одно либо другое окно для ввода данных. Так вот, каким образом это дело можно осуществить? Я наваял три отдельных диалоговых окна-объекта класса CPropertyPage и новый объект класса CPropertySheet (и то сомневаюсь в правильности этих действий). Пока  в плане перехода между окнами я освоил только ф-ии создания мастера приложений OnWizardNext() и OnWizardBack(), но это, как вы понимаете, не совсем то, что нужно. Буду благодарен за любую подсказку.

PS. Руки у меня действительно не совсем из плеч, так что подсказку желательно поразвернутей) Отправка к соответствующим мануалам тоже приветствуется.
PM MAIL   Вверх
voov
Дата 19.5.2010, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



смотри CDialog::DoModal()
PM MAIL   Вверх
Hawkmoth
Дата 19.5.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если я правильно мыслю, в обработчик событий при нажатии на кнопку для перехода к другому окну надо добавить приблизительно вот такой вот код:
Код

void CDialog::OnBigButtonOk()
{
    // TODO: Add your control notification handler code here
    COtherPage2 [новое_окно];
    [новое_окно].doModal();    
}


При этом вместо текста [новое_окно] необходимо вставить указатель на это самое открывающееся окно. Только я деревянный и не понимаю, какой именно указатель. Не идентификатор же... Ткните плз носом


Всё, понял. Экземпляр класса должен стоять. И заголовочный файл "COtherPage.h" у меня не был прописан в основном окне. Тогда еще вопрос: как сделать так, чтобы при открытии нового окна убиралось старое? Т.е. как бы был эффект поступательного движения вперед, а не наложения окон...

Это сообщение отредактировал(а) Hawkmoth - 19.5.2010, 19:49
PM MAIL   Вверх
voov
Дата 20.5.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Хм, так это у тебя чтото типа визарда и полчучается. Может в этом направлении и двигайся (это я про твои OnWizardNext)?

А какой тип проекта? Dialog based, SDI, MDI? Если Dialog based, то закрыв основное окно, ты закроешь все приложение. Нужно делать диалоги дочерними или использовать те же CPropertyPage. И DoModal в этом случае не подходит. Дочерние диалоги нужно сначала создать, а потом показывать/прятать в зависимости от необходимости. Поищи про НЕМОДАЛЬНОЕ окно или диалог. И еще про CTabCtrl посмотри, там тоже нечто похожее.
PM MAIL   Вверх
Albor
Дата 20.5.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Цитата(Hawkmoth @  19.5.2010,  17:42 Найти цитируемый пост)
Я наваял три отдельных диалоговых окна-объекта класса CPropertyPage и новый объект класса CPropertySheet (и то сомневаюсь в правильности этих действий). 

Как по мне, то для начала это слишком сложно. Можно создать простые диалоги и вызывать их через DoModal(). Порядок действий такой: в ресурсах создаёшь 2 диалога и добавляешь для них классы унаследованные от CDialog, в родительском диалоге создаёшь массив CDialog * pDialogs[2]; , инициализируешь его адресами своих диалогов, связываешь переменную целого типа с радиокнопками, например m_radio. В обработчике OnBigButtonOk() просто вызываешь диалог таким образом: pDialogs[m_radio]->DoModal();

Это сообщение отредактировал(а) Albor - 20.5.2010, 12:07
PM MAIL ICQ   Вверх
Hawkmoth
Дата 20.5.2010, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
А какой тип проекта? Dialog based, SDI, MDI?


Dialog Based. Остального я пока боюсь касаться smile

Цитата
Если Dialog based, то закрыв основное окно, ты закроешь все приложение.


Гм... это не есть хорошо. У меня, исходя из поставленной задачи, все окна получаются как бы равноценными, просто два из них взаимоисключающие и вызываются в зависимости от действий в первом окне. Т.е., это не дочерние диалоговые окна, как, например, окно "Шрифт" или "Абзац" в ворде, а что-то типа многостраничной анкеты: перевернул - и к первому окну уже не возвращаешься... Что посоветуете в этом случае?

Цитата
Хм, так это у тебя чтото типа визарда и полчучается. Может в этом направлении и двигайся (это я про твои OnWizardNext)?


Может, но меня раздражает этот формальный экстерьер: черточка, под ней рядком кнопки "Назад", "Далее", "Справка"... Может, как-то можно это всё поднастроить? "Справку" долой, кнопку "Далее" перетащить в произвольное место, и обозвать ее по-другому... В общем, чтобы остался только функционал - переход вперёд и назад по двум соответствующим кнопкам  smile

Цитата
Как по мне, то для начала это слишком сложно. Можно создать простые диалоги и вызывать их через DoModal(). Порядок действий такой: в ресурсах создаёшь 2 диалога и добавляешь для них классы унаследованные от CDialog, в родительском диалоге создаёшь массив CDialog * pDialogs[2]; , инициализируешь его адресами своих диалогов, связываешь переменную целого типа с радиокнопками, например m_radio. В обработчике OnBigButtonOk() просто вызываешь диалог таким образом: pDialogs[m_radio]->DoModal();


Действительно пока сложновато, я пока лишь бегло ознакомился с классами CPropertyPage и CPropertySheet, понял лишь, что они создают что-то типа вкладок на одной общей странице. Но (см. вышесказанное), может, это именно то, что мне нужно?


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


 




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


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

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