![]() |
|
![]() ![]() ![]() |
|
Ильнар |
|
||||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.1.2006 Репутация: нет Всего: нет |
Существует MDI приложение, необходимо запустить копию фрейма основного фрейма приложения в отдельном потоке, по сути получается что надо запустить копию приложения из самого приложения в отдельном потоке. Каким образом я это попытался сделать: завел два новых класса
и в обработчике запускаю поток следующим образом
Программа ругается, а затем падает на функции LoadFrame(IDR_PREVIEWFRAME) с помощью которой я создаю фрейм. В чем может быть дело? Класс самого приложения CWinApp, проблема была бы исчерпана если бы можно было завести в приложении еще один экземпляр класса CWinApp, но как известно MFC этого не позволяет. Что я не так делаю? |
||||
|
|||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
а можно узнать, чем вызвана такая необходимость? зачем нужно 2 экземпляра CWinApp?
|
|||
|
||||
Ильнар |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.1.2006 Репутация: нет Всего: нет |
Необходимо запустить копию MDI фрейма с другими тулбарами и с другим набором меню (просто скрыть имеющиеся и показать другие не годится), также дочерние окна ChildFrame в этом MDIFrame планируется отображать с другим видом! я предположил что это можно сделать в отдельном потоке! возможно я не прав. а WinApp я предположил избавит от вываливающихся ассертов, которые никак не удается победить. на самом деле я использую WinThread (см выше). Может есть другие способы?
|
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Значит делать 2 экземпляра WinApp полный абсурд. Так как WinApp представляет собой собственно приложение. А попытки добавить в приложение второе приложение ни к чему хорошему не приведут. То же касается главного окна приложения. У приложения может быть только одно главное окно.
ИМХО, такая постановка задачи говорит либо о неправильном проектировании, либо о не понимании того, как работает приложение с архитектурой документ-вид. |
|||
|
||||
Ильнар |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.1.2006 Репутация: нет Всего: нет |
Значит задача такая: запущено MDI приложение, главное окно содержит несколько тулбаров и загружено с определенным меню! в MDI приложении открыты несколько документов с использованием одного шаблона DocTemplate, условно назову его шаблон 1, необходимо каким-то образом закрыть все имеющиеся тулбары и открыть другой один тулбар! также перегрузить меню! также необходимо отобразить документы с другоим видом, для этого я использовал другой шаблон DocTemplate, условно назову его шаблон 2. Если делать все это в одном главном окне в основном потоке , то визуально окно приложения танцует, промаргивает пока не завершиттся операция! а это не хорошо, да и не солидно. представьв течении 20-30 сек окно моргает, Child окна закрываются-открываются, не красиво! поэтому я хотел поступить следующим образом: все преобразования документов делаю в дополнительном потоке и в нем же загружаю MDI фрейм с другим тулбаром и другим меню, а потом его просто показываю, а главное окно приложения скрываю ShowWindow(SW_HIDE) и все выглядит очень здорово!
если есть другие предложения и способы решения задачи, то я буду признателен.. |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Все равно не очень понятно. В шаблоне 1 и 2 у тебя разные типы документов или один и тот же тип? Что это за преобразования документов, которые ты хочешь делать в отдельном потоке? Кстати, операции над документами (данными) можно делать и в отдельном потоке (скорее всего здесь нужна будет синхронизация данных), но вид, представляющий этот документ, моргать не должен.
и это не проблема, главное знать что и когда показывать. |
|||
|
||||
Ильнар |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.1.2006 Репутация: нет Всего: нет |
я разобрался в проблеме, я неправильно работал с шаблоном документов в дополнительном потоке!
теперь возникла другая проблема. как можно отключить загрузка меню в основном MDIFrame? чтобы вообще меню не было |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Посмотри в классе приложения (CxxxxApp) метод InitInstance. Там есть такой код
|
|||
|
||||
Ильнар |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.1.2006 Репутация: нет Всего: нет |
и что с этим кодом делать?
когда откроется документ, то меню перегружается более полно, а мне надо чтобы его вообще не было когда откроется документ |
|||
|
||||
voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
В шаблоне документа указывается меню, которое будет загружено при открытии документа. Убери его, если не нужно меню совсем.
Можно еще сделать ресурс меню, которое будет пустым. |
|||
|
||||
Ильнар |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 16.1.2006 Репутация: нет Всего: нет |
все работает
![]() спасибо! |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |