Тема: Если не открыто ни одного документа, не создается новый

Здравствуйте!
Создаю в своей программе чертежи, вызываю executeInApplicationContext, в нем функция, вызывающая appContextNewDocument, все работает, но только если открыт хоть один чертеж. Если закрыть их все, ничего не создается. :( Как с этим бороться, подскажите, плиз.

Re: Если не открыто ни одного документа, не создается новый

Не разобрался, но после переноса всего кода в один немодальный диалог, вызова appContextNewDocument прямо из него
(автоматически - контекст приложения), все работает как надо

Re: Если не открыто ни одного документа, не создается новый

> Kostt
Прозевал твой вопрос. Если в двух словах, то дело в том, что из приложения, работающего в контексте документа в режиме zero document нельзя использовать executeInApplicationContext. А вот вызов из немодального диалога - это аналог запуска из контекста приложения - все работает нормально.

Re: Если не открыто ни одного документа, не создается новый

Закрываю последний документ в приложении. Затем пытаюсь открыть другой. Через executeInApplicationContext не выходит - документ не открывается. Без открытых документов sendStringToExecute тоже не подходит.
Подскажите, пожалуйста, как открыть "первый" документ. SDK 2000.
Спасибо

Re: Если не открыто ни одного документа, не создается новый

> equilibrium
Что передать первым параметром в executeInApplicationContext?

Re: Если не открыто ни одного документа, не создается новый

Не тем путем идешь. Нужно или запретить закрывать все документы, или не использовать executeInApplicationContext ждя создания/открытия чертежа.

Re: Если не открыто ни одного документа, не создается новый

> Александр Ривилис
Для случая, когда есть другие документы кроме закрываемого, я беру любой и делаю его активным, затем открываю документ через executeInApplicationContext. Он открывается, а затем я получаю исключение от которого автокад вылетает.
При этом
1) откываю я документ, который только что закрыл
2) делаю это в реакторе AcApDocManagerReactor::documentDestroyed
Могут ли эти причины вызвать ошибку, либо я где-то не выделил/освободил память?
И другой вопрос по той же теме: когда нет ниодного открытого документа, возможно ли создать новый, сделать его активным, а затем уже открыть существующий документ?

Re: Если не открыто ни одного документа, не создается новый

Нужно в этом реакторе AcApDocManagerReactor::documentDestroyed установить таймер (например на 500мсек), а в функции таймера использовать AcApDocManager::appContextOpenDocument или AcApDocManager::appContextNewDocument
Ну и не забыть в функции таймера сразу прибить таймер.

Re: Если не открыто ни одного документа, не создается новый

> Александр Ривилис
На сколько я понял.. это ответ на оба вопроса?
Если есть под рукой код установки/снятия таймера или линк в нужную тему - я бы не отказался.
Спасибо большое

Re: Если не открыто ни одного документа, не создается новый

Посмотри описание функций SetTimer и KillTimer в MSDN

Re: Если не открыто ни одного документа, не создается новый

Где-то так:

int iInterval = 500;
const int ID_TIMERNUM = 4321;
CString lastFilename = _T("");
VOID CALLBACK MyTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
  ::KillTimer(hwnd,ID_TIMERNUM);
  if (acDocManager->appContextOpenDocument(lastFilename) != Acad::eOk) {
    acDocManager->appContextNewDocument(NULL);
  }
}
void MyDocManReactor::documentDestroyed(const ACHAR * fileName)
{
  lastFilename = fileName;
  if (acDocManager->documentCount() <= 1) {
    ::SetTimer(acedGetAcadFrame()->m_hWnd,ID_TIMERNUM,iInterval,MyTimerProc);
  }
  AcApDocManagerReactor::documentDestroyed (fileName) ;
}

И еще ::KillTimer(hwnd,ID_TIMERNUM); в обработчике On_kUnloadAppMsg.