Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь, Doc/View. не могу разобраться 
:(
    Опции темы
OverBug
  Дата 6.5.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 13.4.2006
Где: г.Пенза, Пензенск ой обл.

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



Возможно ли так сделать? 
Есть MDI проект. В нем одно Doc/View представление. Добавил еще один View и нужно его привязать к существующему Doc, причем Parent у этого View является ControlBar (вернее унаследованный от него класс). Т.е. надо в MDI приложении создать Doc/2View. Не знаю как лучше это сделать. Сначала хотел для второго View использовать DDX, но он вроде-бы работает с классами на основе CDialog. Или

Код

CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MAINTYPE,
    RUNTIME_CLASS(CPrimaryDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CPrimaryView));
if (!pDocTemplate)
    return FALSE;
AddDocTemplate(pDocTemplate);

pDocTemplate = new CMultiDocTemplate(IDR_MAINTYPE,
    RUNTIME_CLASS(CPrimaryDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CSecondaryView));
if (!pDocTemplate)
    return FALSE;
AddDocTemplate(pDocTemplate);


Впринципе, все это для того, чтобы обмениватся данными этому Доку еще с View. Может есть другой способ? 
PM MAIL ICQ   Вверх
Dray
Дата 7.5.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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





--------------------
忍者

user posted image
PM MAIL   Вверх
Autumn
Дата 7.5.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Так можно работать с любым классом, производным от Cwnd,  а не только с диалогом. Просто это чаще используется при работе с блоками диалога 
PM MAIL   Вверх
OverBug
Дата 7.5.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 13.4.2006
Где: г.Пенза, Пензенск ой обл.

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



Coocky
Цитата

Короче,если один документ-множество представлений жди завтра топик "Маленькие тайны.МФС.".А пока я поехал домой

в поиске на эту тему ничего нету. Современный интерфейс - ШАГ ПЕРВЫЙ тоже нет. Продолжение не могу найти.

LexaK
Цитата

Разобрался. Круглински рулит!
 А где он че нашел и прочитал незнаю.  smile 

Мне хотя-бы маленькийпример того как к существующему Доку привязать существующий Вьюв.
 Но...

Цитата

Так можно работать с любым классом, производным от Cwnd,  а не только с диалогом. Просто это чаще используется при работе с блоками диалога 
 т.е. с помощью DDX можно обмениаться данными документу и представлению не связанными шаблоном. Но мой второй Вью создается динамически, и внем контролы создаютя динамически. 
PM MAIL ICQ   Вверх
Earnest
Дата 10.5.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(OverBug @  7.5.2006,  22:27 Найти цитируемый пост)
Мне хотя-бы маленькийпример того как к существующему Доку привязать существующий Вьюв.

У документа есть метод AddView... Но тогда непонятно, зачем тебе создавать template, если ты все руками делаешь... Если есть шаблон, то для открытия нового вида заданного типа можно использовать его ф-ю CreateNewFrame...

Цитата(OverBug @  6.5.2006,  23:56 Найти цитируемый пост)
причем Parent у этого View является ControlBar (вернее унаследованный от него класс). 

Лучше бы вложить внутрь ControlBar фрейм, а уже в него - вью. Во-первых, см. выше (сможешь использовать имеющиеся функции), а во-вторых - вью в некоторых местах очень хочет, чтобы парентом был именно фрейм. Заткнуть это можно, но нужно ли? Разумеется, фрейм лучше написать тоже свой...
 


--------------------
...
PM   Вверх
OverBug
Дата 14.5.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 13.4.2006
Где: г.Пенза, Пензенск ой обл.

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



С этим проблем нет, я использую CSizingControlBar(спасибо CptainFlint).

Сам вью создается при создании гланого окна, когда создаются статус, управления и контрол бары, вызовом метода Create и привязывается к ContolBar. Возникла проблема отображения в нем данных из других классов.
Ничего кроме как привязать к нему документ не придумал, да и ктомуже это удобнее... но конкретно как?
 
PM MAIL ICQ   Вверх
Earnest
Дата 15.5.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Уже писала:
Цитата(Earnest @  10.5.2006,  17:32 Найти цитируемый пост)
У документа есть метод AddView... 


 


--------------------
...
PM   Вверх
OverBug
Дата 16.5.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 13.4.2006
Где: г.Пенза, Пензенск ой обл.

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



После добавления этого вью, при создании документа когда будет создаваться добавленный вью? Т.е. Есть чилд вью+документ, добавлю к нему свой вью (кстати когда и где лучше это сделать), при создании чилда, добаленный вью создатся сразу или его нужно создать? 
PM MAIL ICQ   Вверх
Earnest
Дата 17.5.2006, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Никогда он сам не будет создаваться. Ты обязан сам его ручками создать, и только потом добавить. Вью в списке документа должны быть валидными.
Когда делать, зависит от задачи. Если в панели только один такой вью, то логичнее всего - когда создаешь панель. А если несколько (например, для каждого документа создается закладка или просто страница) - то при загрузке документа. 
Кстати, имей в виду, что стандартный механизм МФЦ закрывает (выгружает) документ, когда закрывается его последний вью. Но это только если вью живет в стандартном фрейме. В твоем случае, тебе придется вручную проверять, что остался только вью в панели, и закрывать документ принудительно.

Добавлено @ 08:16 
Цитата(OverBug @  14.5.2006,  11:20 Найти цитируемый пост)
Возникла проблема отображения в нем данных из других классов.
Ничего кроме как привязать к нему документ не придумал

Между прочим, это не самый лучший метод, ИМХО. Т.е. я тоже когда-то так делала - чтобы работал механизм CDocument::UpdateAllViews и автоматически отображались изменения. Но столкнулась с необходимостью заката солнца вручную (насчет закрытия документа).
Потом просто сделала свой параллельный механизм событий без привязки к MFC-архитектуре. Т.е. документ (или кто там еще) просто генерирует событие определенного типа, а любой, кто хочет, на него реагирует. Свой механизм можно сделать более гибким (с учетом потоков и прочего), а с MFC он будет сосуществовать мирно. Так что подумай.
 


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


 




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


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

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