![]() |
|
|
![]()
|
|
| Hawkmoth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 22.10.2006 Репутация: нет Всего: 1 |
Добрыый день всем участникам форума. Вот решил освоить VC++, и в числе прочих нубский трудностей столкнулся с такой проблемой: приспичило мне натворить программку, состоящую из трех диалоговых окон, два из которых взаимоисключающие. Проще говоря, дело обстоит так: пользователь запускает ехе, видит перед собой серое окошко с двумя радиокнопками, на одну из которых он должен изволить кликнуть. Затем предполагается, что он жмет на большой "OK" в этом же окошке, и в зависимости от выбранного radiobutton открывается одно либо другое окно для ввода данных. Так вот, каким образом это дело можно осуществить? Я наваял три отдельных диалоговых окна-объекта класса CPropertyPage и новый объект класса CPropertySheet (и то сомневаюсь в правильности этих действий). Пока в плане перехода между окнами я освоил только ф-ии создания мастера приложений OnWizardNext() и OnWizardBack(), но это, как вы понимаете, не совсем то, что нужно. Буду благодарен за любую подсказку.
PS. Руки у меня действительно не совсем из плеч, так что подсказку желательно поразвернутей) Отправка к соответствующим мануалам тоже приветствуется. |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
смотри CDialog::DoModal()
|
|||
|
||||
| Hawkmoth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 22.10.2006 Репутация: нет Всего: 1 |
Если я правильно мыслю, в обработчик событий при нажатии на кнопку для перехода к другому окну надо добавить приблизительно вот такой вот код:
При этом вместо текста [новое_окно] необходимо вставить указатель на это самое открывающееся окно. Только я деревянный и не понимаю, какой именно указатель. Не идентификатор же... Ткните плз носом Всё, понял. Экземпляр класса должен стоять. И заголовочный файл "COtherPage.h" у меня не был прописан в основном окне. Тогда еще вопрос: как сделать так, чтобы при открытии нового окна убиралось старое? Т.е. как бы был эффект поступательного движения вперед, а не наложения окон... Это сообщение отредактировал(а) Hawkmoth - 19.5.2010, 19:49 |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Хм, так это у тебя чтото типа визарда и полчучается. Может в этом направлении и двигайся (это я про твои OnWizardNext)?
А какой тип проекта? Dialog based, SDI, MDI? Если Dialog based, то закрыв основное окно, ты закроешь все приложение. Нужно делать диалоги дочерними или использовать те же CPropertyPage. И DoModal в этом случае не подходит. Дочерние диалоги нужно сначала создать, а потом показывать/прятать в зависимости от необходимости. Поищи про НЕМОДАЛЬНОЕ окно или диалог. И еще про CTabCtrl посмотри, там тоже нечто похожее. |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Как по мне, то для начала это слишком сложно. Можно создать простые диалоги и вызывать их через DoModal(). Порядок действий такой: в ресурсах создаёшь 2 диалога и добавляешь для них классы унаследованные от CDialog, в родительском диалоге создаёшь массив CDialog * pDialogs[2]; , инициализируешь его адресами своих диалогов, связываешь переменную целого типа с радиокнопками, например m_radio. В обработчике OnBigButtonOk() просто вызываешь диалог таким образом: pDialogs[m_radio]->DoModal(); Это сообщение отредактировал(а) Albor - 20.5.2010, 12:07 |
|||
|
||||
| Hawkmoth |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 22.10.2006 Репутация: нет Всего: 1 |
Dialog Based. Остального я пока боюсь касаться
Гм... это не есть хорошо. У меня, исходя из поставленной задачи, все окна получаются как бы равноценными, просто два из них взаимоисключающие и вызываются в зависимости от действий в первом окне. Т.е., это не дочерние диалоговые окна, как, например, окно "Шрифт" или "Абзац" в ворде, а что-то типа многостраничной анкеты: перевернул - и к первому окну уже не возвращаешься... Что посоветуете в этом случае?
Может, но меня раздражает этот формальный экстерьер: черточка, под ней рядком кнопки "Назад", "Далее", "Справка"... Может, как-то можно это всё поднастроить? "Справку" долой, кнопку "Далее" перетащить в произвольное место, и обозвать ее по-другому... В общем, чтобы остался только функционал - переход вперёд и назад по двум соответствующим кнопкам
Действительно пока сложновато, я пока лишь бегло ознакомился с классами CPropertyPage и CPropertySheet, понял лишь, что они создают что-то типа вкладок на одной общей странице. Но (см. вышесказанное), может, это именно то, что мне нужно? |
||||||||
|
|||||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |