![]() |
|
|
![]()
|
|
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: нет Всего: 1 |
Появилась необходимость сделать в MFC диалоговое приложение, но при этом чтобы в нем присутсвовало меню и панель инструментов.
С Single Document и Multiple Document проблем не возникает, т.к. можно встроить и меню, и панель инструментов в конструкторе в процессе создания приложения, поставив всего лишь галочку. Но как быть с диалоговым приложением? Может кто-нибуть сталкивался с такой проблемой или попадалась документация по теме? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) Создай ресурс меню.
2) В свойствах диалога есть пункт "Меню". Поставь туда ид-р ресурса. Добавлено @ 10:05 Панель инструментов создавай в OnCreate, точно так же, как SDI\MDI-приложениях. -------------------- ... |
|||
|
||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: нет Всего: 1 |
C меню всё понятно, оказалось проше чем я мог представить.
А вот с панелью инструментов несовсем. В SDI\MDI-приложениях галку ставишь и все готово. В диалоговом галки не поставишь, а что за код для инициализации панели инструментов писать я понятия не имею. |
|||
|
||||
| OverBug |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 13.4.2006 Где: г.Пенза, Пензенск ой обл. Репутация: нет Всего: 1 |
А если нужно его динамически изменить?
Можно ли так сделать?
просто надо этот код поместить на сообщение WM_CREATE Добавлено @ 12:54
Это сообщение отредактировал(а) OverBug - 16.4.2006, 12:48 |
||||
|
|||||
| fear |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: нет Всего: 1 |
Что то не прикручивается панель инструментов.
Создал ресурс панели инструментов с идентификатором IDR_TOOLBAR. Вставил в функцию OnCreate диалогового класса следующий код, только я не только результата не увидел, ещё и компилятор ряд ошибок выдал (хотя в MSDN такой же пример).
d:\lang\myprojects\c++\work\test\test\testdlg.cpp(171) : error C2065: 'indicators' : undeclared identifier d:\lang\myprojects\c++\work\test\test\testdlg.cpp(171) : error C2070: ''unknown-type'': illegal sizeof operand d:\lang\myprojects\c++\work\test\test\testdlg.cpp(175) : error C3861: 'EnableDocking': identifier not found d:\lang\myprojects\c++\work\test\test\testdlg.cpp(176) : error C3861: 'DockControlBar': identifier not found Попробовал убрать всё лишнее, оставить только инициализацию панели инструментов, в итоге компилятор не ругается и результата ни какого не видно.
Пробовал копировать рабочий код инициализации из SDI/MDI приложений и вставлять его в диалоговое приложение, результата ни какого не добился. Может быть для диалоговых приложений есть свои ньюансы? У кого-нибуть получалось прикрутить панель инструментов к диалоговому приложению? |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Что касается индикаторов, то ты просто ссылаешься на неизвесную переменную.
OverBug пропустил при копировании, а ты содрал не думая... Это должен быть массив, причем соответствующие ид-ры обязательно должны присутствовать в строковом ресурсе, иначе при создании будет ругань. С панелями умеет работать только фрейм... В смысле пристыковки и т.д. Поэтому компилятор и ругается на неизвестные функции. Наверно, как-то подкрутить можно (если требуется фиксированная панель). Например, самостоятельно определи вертикальный размер панели (у ToolBar есть функция CalcFixedLayout) и руками перемести панель (SetWindowPos)... НО не уверена, что это все. Второй вариант: думаю, будет проще унаследовать свое главное окно от CFrameWnd, внутри сделать CFormView. Вместо CDialog::DoModal вызывать RunModalLoop. Или просто сделать нормальное SDI приложение, но без документов. Это сообщение отредактировал(а) Earnest - 17.4.2006, 18:06 -------------------- ... |
|||
|
||||
| OverBug |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 13.4.2006 Где: г.Пенза, Пензенск ой обл. Репутация: нет Всего: 1 |
Посмоти в FAQ/C++/MFC/Общие вопросы. Там есть код. Сам не пробовал, но если он там, значит он того стоит.
в stdafx.h добавь #include <afxext.h>. В ней эти функции объявлены. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ерунду говоришь. Эти функции есть у фрейма и панелей, их нет в диалоге. -------------------- ... |
|||
|
||||
| OverBug |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 13.4.2006 Где: г.Пенза, Пензенск ой обл. Репутация: нет Всего: 1 |
Да... Они в afxwin.h объявлены.
Тогда почему такие ошибки? afxwin.h, помоему, по умолчанию визард ее включает? Вообще визард, при создании диалога вкл. и afxwin.h, и afxext.h!!!!? Думаю, что если бы fear, пользовался визардом, то таких ошибок не было-бы. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
OverBug, это не глобальные функции, а класса CFrameWnd. Ну откуда они у диалога возьмутся? И при чем тут визард?
Ну что вы все за визард цепляетесь, как за костыль! В результате, как только чего-то визард не умеет, поднимается паника: как, да что! А все-то делов - включить нужные файлы, да добавить нужные обработчики. Ну, еще в MSDN заглянуть. fear, в диалог можно прикрутить тулбар, но только статический, фиксированный. Для этого нужно его создать, загрузить, а затем вручную разместить вверху диалога. -------------------- ... |
|||
|
||||
| POV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.4.2006 Репутация: нет Всего: нет |
Полностью согласен с предыдущим оратором. Однако очумелый волшебник, несомненно, полезен особенно в тех случаях, когда надо быстро настрогать всяких прототипчиков с последующим их заполнением и редактированием ручками. А ручки надо развивать, особенно, когда речь идет о простых правилах синтаксиса и семантики. Видишь класс - читай откель он и ставь заголовчики куда надо... это же так просто... Извините...
|
|||
|
||||
| КУБ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 5.6.2006 Где: Украина, Донецк Репутация: нет Всего: нет |
Вставь после кода создания Тулбара (т.е. в конце) эту функцию:
Она отвечает где и как отображать Тулбар. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |