| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Переопределение функции OnCreateClient |
| Автор: NewLine 17.7.2006, 12:32 |
| Превет. У меня есть MDI приложение и пункт меню "New document". Скажите пожалуйста где необходимо переопределять функцию OnCreateClient, чтобы при открытии этого документа в нем можно было просмотреть несколько View c помощью CSplitterWnd. Спасибо. |
| Автор: Earnest 17.7.2006, 12:36 |
| В наследнике MDIChildFrame - т.е. в рамке вида. Добавлено @ 12:37 т.е. CMDIChildWnd |
| Автор: NewLine 17.7.2006, 13:01 |
| Теперь получается он для любого пункта меню будет открывать этот документ. |
| Автор: Earnest 17.7.2006, 13:29 |
| Кто - он? |
| Автор: NewLine 17.7.2006, 13:44 |
| Получается, что для любого пункта меню открывается один и тот же документ с несколькими View. Документ!!! |
| Автор: NewLine 17.7.2006, 17:26 | ||
У меня например есть два пункта меню "New Document" и "Second Document" и оба они вызывают виртуальную функцию OnCreateClient, которая определяет показ нескольких View.
А как мне сделать чтоб при выборе одного пункта меню открывался документ с несколькими View, а для другого с одним? Спасибо. |
| Автор: Earnest 19.7.2006, 08:16 |
| Ну, во первых, ты каждый раз создаешь не 2 вида а больше, но неважно. Функция OnCreateClient вызывается каждый раз, когда создается новый фрейм. По идее, задачу мог бы решить параметр, переданный в OnCreateClient, в зависимости от которого ты создаешь только одну панель или несколько. Но передать такой параметр проблематично - не предусмотрено. Можно, конечно, мудрить с внутренними переменными или статическими флагами, но это все криво. Поэтому я бы сделала так. В OnCreateClient созавать сплиттер и только одну панель. Далее, один из пунктов меню обрабатывается стандартно - OpenDocumentFile и т.д. Второй - пишешь свой обработчик, где к стандартному коду (который открывает только один вид), добавляешь свой, который создает необходимое число видов в сплиттере фрейма. Но вообще-то более стандартный подход - когда у тебя всегда открывается один вид, а команде меню (скажем, Split) - текущий вид расщепляется. Т.е. обработку Open оставляешь в покое, а в команде Split берешь текущий фрейм и создаешь в сплиттере необходимые панели. Но, возможно, я тебя не поняла, и твой Second Document - это совсем другая сущность. Тогда можно просто создать 2 разных фрейма и, соответственно, 2 шаблона документа. Один пункт меню обрабатываешь с помощью одного шаблона, второй - с помощью другого. |
| Автор: NewLine 20.7.2006, 09:50 |
| Ок. Спасибо большое за помощь. |