![]() |
|
![]() ![]() ![]() |
|
GetProcAddress |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 20.1.2010 Репутация: нет Всего: нет |
Пытаюсь создать в MDI еще одно окно для вида с помощью CMDIFrameWnd::OnWindowNew(), получается копия уже созданного окна, а мне нужно во втором окне получить другой вид. Подскажите, где мне можно подменить или поменять класс вида подключенный к окну.
|
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Тогда тебе нужен другой шаблон (CMultiDocTemplate), со своими фреймом-видом-документом. Это проще всего. И скажи ему создать новый фрейм:
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild); -------------------- ... |
|||
|
||||
GetProcAddress |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 20.1.2010 Репутация: нет Всего: нет |
Нее, это по моему немножко не то. Я пробовал
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild); получаю копию своего вида, попробовал переопределить этот метод, но не пошло....запутался в pActiveChild , есть возможность переделать его, но у меня не получилось. Мне нужен один документ и много видов(примерно 20), в четырех окнах, причем разных, одно со сплиттером и два с табконтролами. Я прочитал ваши советы здесь http://forum.vingrad.ru/forum/topic-88243/unread-1.html, немного побродил по MFC . У меня гибрид не заю чего с чем, в начале я создаю пустое окно MDI:
затем по кнопке "Открыть":
у меня нормально создается документ и вид, а вот дальше нужно добавить кучу видов к этому документу. Сделал класс, производный от CMultiDocTemplate, переопределил в нем OpenDocumentFile ну и в общем все что сделал за сегодня. Я в правильном направлении иду? Это сообщение отредактировал(а) GetProcAddress - 19.4.2013, 00:26 |
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ты пропустил главное: тебе нужен ДРУГОЙ шаблон, с другим видом. Его не обязательно регистрировать в приложении (AddDocTemplate), если вызывать руками. Если там другой вид, копии текущего получиться никак не может. OpenDocumentFile вряд ли нужно переопределять. Но посмотреть код MFC смысл имеет, чтобы понять - все что там делается - это CreateNewFrame -------------------- ... |
|||
|
||||
GetProcAddress |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 20.1.2010 Репутация: нет Всего: нет |
Дело в том что другой шаблон создается с указателем на ресурсы, который не проходит проверку в конструкторе, если я делаю ресурсы NULL. При подсовывании левых ресурсов, которые можно использовать в своих целях, например для названия окна, мне нужно гдето что то подкрутить, что я и сделал в производном классе от CMultiDocTemplate. Подсовывать один и тот же идентификатор ресурсов я не вижу смысла, затем при создании нового документа MFC обнуляет старый, чего мне нельзя делать, поэтому я пошел по пути переопределения OpenDocumentFile.
CreateNewFrame(pDocument, pActiveChild) я смотрел, он берет за основу активный вид и документ:
если при втором параметре вместо NULL, передать ему pActiveChild, как где то рекомендуют, то его нужно заполнить руками,а это структура огромная где содержится информаця обо всех трех классах MDI, и как в ней поменять класс вида и фрейма, я не смог, поэтому стал отталкиваться от ID_WINDOW_NEW и вышел на OpenDocumentFile. |
|||
|
||||
GetProcAddress |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 20.1.2010 Репутация: нет Всего: нет |
Спасибо Earnest.
Все таки пришел к CreateNewFrame (). Застопорился из за ерунды, почемуто мастер классов один фрейм создал : DECLARE_DYNCREATE а второй: DECLARE_DYNAMIC в результате одно окно не создавалось, теперь все работает, вот что получилось:
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |