Re: Основной MDIFrame в отдельном потоке
От: AstroMan  
Дата: 07.09.08 08:57
Оценка:
Здравствуйте, TatarDozor, Вы писали:

TD>Существует MDI приложение, необходимо запустить копию фрейма основного фрейма приложения в отдельном потоке, по сути получается что надо запустить копию приложения из самого приложения в отдельном потоке. Каким образом я это попытался сделать: завел два новых класса

TD>
TD>class CPreviewFrame : public CMDIFrameWnd - класс копия основного фрейма, 
TD>class CPreviewApp : public CWinThread - наследник от CWinThread чтобы можно было в потоке манипулировать графикой
TD>


TD>и в обработчике запускаю поток следующим образом


TD>
TD>CWinThread *p = AfxBeginThread(RUNTIME_CLASS(CPreviewApp),THREAD_PRIORITY_NORMAL);
TD>


TD>Программа ругается, а затем падает на функции LoadFrame(IDR_PREVIEWFRAME) с помощью которой я создаю фрейм. В чем может быть дело?

TD>Класс самого приложения CWinApp, проблема была бы исчерпана если бы можно было завести в приложении еще один экземпляр класса CWinApp, но как известно MFC этого не позволяет.
TD>Что я не так делаю?

Я такое делал, все хорошо работает.
Правда у меня в потоках создавались окна одинакового класса. Создаются по команде типа "Открыть в новом окне".
CWinApp тебе не нужен, цикл прокачки сообщений со всеми idle и т.п. есть в CWinThread.
В MFC есть мутный код при создании окна рамки (что-то там с поддержкой старых версий, дефаултных меню и др.).
Если не путаю, то надо перекрыть OnCreateClient для CMDIFrameWnd, чтобы это безобразие не вызывалось.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.