Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А что делать, если MDI каркас MFC не подходит? Есть идеи? 
:(
    Опции темы
Rapalex
Дата 20.3.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

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



У меня такое дело нужно написать программу, которая не совсем вписывает-ся в каркас предлагаемый FMC.

1. Мне нужно чтоб внешний вид был, как у MDI, а по факту всегда работало только с одним документом, и было запущено только один раз в системе.

Проблему решил так: при открытии нового документа пребывал закрыть от-крытый документ. Остальные проблемы решать и не пришлось.

2. Есть несколько типов представлений и все они показывают определённые части документа.

С этим проблем не было, я и рассказывать не буду.

Проблема в том, что один вид документа должен причаливаться как ToolBar к MainFrame.

И САМАЯ большая проблема в том, что при открытии документа не должно быть (или может не быть) открытых представлений документа. Это как в студии, есть выход написать “свою MFC” но мне это не нравиться.

И какие есть идеи по поводу последних двух проблем?

Рад буду услышать любые мысли.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Бугемот
Дата 20.3.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Rapalex @ 20.3.2006, 14:19 Найти цитируемый пост)
И САМАЯ большая проблема в том, что при открытии документа не должно быть (или может не быть) открытых представлений документа. Это как в студии, есть выход написать “свою MFC” но мне это не нравиться.

В классе Вашего приложения (CYourApp) найдите строку:
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) и замените на
ON_COMMAND(ID_FILE_NEW, OnFileNew)
Естественно, метод OnFileNew должен быть перегружен
void CYourApp::OnFileNew()
{

}


Цитата(Rapalex @ 20.3.2006, 14:19 Найти цитируемый пост)
Проблема в том, что один вид документа должен причаливаться как ToolBar к MainFrame.

в сети куча бесплатных подобных штук. Если этот вид нужен для контролов, посмотрите в сторону CDialogBar.

PM MAIL   Вверх
Rapalex
Дата 21.3.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

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



Так я сделал, но проблемма что документ должен существовать а представление нет.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Earnest
Дата 21.3.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1) Документ может запросто существовать без вью и фреймов - кто мешает? Просто не надо сразу создавать фрейм и вью при загрузке. Для этого покопайся в CDocTemplate::OpenDocumentFile - она виртуальная, там можно помудрить.
2) Еще придется докрутить закрытие видов: при закрытии последнего документ в стандартном случае закрывается, а тебе ведь надо оставить его открытым до явного закрытия
Так что я бы сделала по другому: Поскольку документ один и тип у него тоже один - я бы написала свой менеджер - да хоть бы простейшую глобальную переменную. И, конечно, нужно переписать обработчик OnFileNew. А вот MDI-темплэйты я бы использовала для различных видов этого документа, представив показываемые там части как псевдо-документы (которые не надо загружать-выгружать с диска, а надо брать от глобального загруженного документа).


--------------------
...
PM   Вверх
Rapalex
Дата 22.3.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

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



Earnest, так та оно так НО в InitInstance() есть строки:

Код

    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(IDR_ProjectTYPE,
        RUNTIME_CLASS(CDocProject),
        RUNTIME_CLASS(CJustChildFrame),
        RUNTIME_CLASS(CJustView));
    AddDocTemplate(pDocTemplate);


и что мне с ними делать. Они нужны но CJustChildFrame и CJustView нужно указывать, а при запуске приложения они создадк=уться как бы я этого не хотел.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Earnest
Дата 22.3.2006, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1) Во первых - что значит "нужны"? Зачем тебе темплэйт, если ни фрейс ни вью к нему не прилагается? Основная задача DocTemplate - это как раз связь между документом и его видами.

2) Во-вторых, если все-таки нужно зачем-нибудь (ну там строки из ресурсов загрузить) CJustChildFrame и CJustView можно заменить нулями. Конечно, тогда придется кое-где подкрутить. Скорее всего, в OpenDocumeтеFile.



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


 




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


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

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