Тема: Аналог acutPrintf

Пытаюсь написать альтернативу функции acutPrintf для вывода текстовых сообщений в AutoCAD Text Window, путем посылки сообщения WM_SETTEXT из текущего потока.
Направить текстовое сообщение в заголовок главного окна - не проблема:

    CWnd *pWnd = CWnd::FromHandle(adsw_acadMainWnd());
    pWnd->SendMessage(WM_SETTEXT,0,(LPARAM)"My Text");

А как быть с коммандной строкой Text Window - пока не совсем понятно... Существует две функции через которых можно получить хэндл окна: acedGetAcadTextCmdLine() и acedGetAcadDockCmdLine(), но попытки работы с этими функциями не увенчались успехом.
Может кто подскажет как все-таки получить дескриптор окна в котором мы видим все сообщения и команды?

Re: Аналог acutPrintf

Очень не советовал бы это делать, т.к. это не документировано и может поменяться в очередной версии AutoCAD. Тем не менее приведу кусочек кода, который я когда-то нарыл:

BOOL SendText(LPCSTR msg)
{
  CWnd *wTextCmdLine = acedGetAcadTextCmdLine();
  if (wTextCmdLine) {
    CWnd *wCommandLine = wTextCmdLine->GetWindow(GW_CHILD);
    if (wCommandLine) {
      wCommandLine->SetWindowText(msg);
    }
  }
  return TRUE;
}

Для acedGetAcadDockCmdLine() должно быть аналогично.
Я использовал аналог этой функции для других целей - анализировал не пустая ли командная строка.

Re: Аналог acutPrintf

То, что в принципе замена такой функции как acutPrintf может понадобиться - это понятно, но хотелось бы уточнить каковы причины в вашем случае?

Re: Аналог acutPrintf

Использовал acutPrintf только во время первой недели работы с arx, потом плюнул на это дело и привязал стандартный поток вывода к AutoCAD Text Window (реализация элементарна основана acutPrintf), теперь вывожу текстовые сообщения в следующем стиле:
std::cout << "Hello, Autocad!" << std::endl;
И очень доволен smile

Re: Аналог acutPrintf

> archimag
Я так понимаю, что по каким-то соображениям автор вопроса хочет отказаться не от интерфейса, который предоставляет acutPrintf, как аналога C-ишной printf, а от того метода, которым он выводит свои сообщения. Т.е. его чего-то не устраивает (например буферизация вывода, когда сообщение не появлется до прихода \r или \n или еще чего-нибудь.) Так что любые интерфейсы основанные на acutPrintf тут не помогут.

Re: Аналог acutPrintf

> Сергей

> Александр Ривилис
В принципе, в базовой функции acutPrintf меня устраивает всё, заисключением того, что она перстает работать в дополнительном потоке, созданном в теле моего приложения при помощи пресловутой ::AfxBeginThread (т.е. при попытке вывести сообщение о ходе работы программы - ничего не происходит...).
Поэтому я и возымел желание воспользоваться проверенным способом посылки сообщения из текущего потока в соответствующее окно с его последующей обработкой.
Что касается Вашего примера, Александр, то я (обнаружив его в Discussion Groups)  уже попробовал... но увы - ничего не вышло (может версия AutoCAD не та, я тестировал программу в AutoCAD'ах 2000-2002).
Неужели не существует альтернативы вывода текстовой информации в Text Window?

Re: Аналог acutPrintf

Может стоит выводить информацию не в командную строку, а в немодальное окно? На мой взгляд неплохая альтернатива ...

Re: Аналог acutPrintf

> Debalance
Кое что мне удалось получить при помощи acdbHostApplicationServices()->displayChar():

UINT MyThread(LPVOID pParam )
{
  char *msg = (char *)pParam;
  int n=strlen(msg);
  for (int i=0; i < n; i++) {
    acdbHostApplicationServices()->displayChar(msg[i]);
  }
  acedGetAcadTextCmdLine()->PostMessage(WM_CHAR, 0, 0);
  return 0;
}

Эту функция работает и в отдельном потоке. Но нельзя стирать символы и переводить строку. Попробуй. Может что-нибудь и получится. Я проверял только в AutoCAD 2006. А вообще Сергей прав - делай свое окно.

Re: Аналог acutPrintf

> Александр Ривилис
Спасибо за код. Попробую.
Что касается модального окна и вывода информации непосредственно в его контролы - то я так и делаю (в принципе весь интерфейс моей программы построен именно на таком окне). Просто иногда возникает необходимость выводить текст непосредственно в коммандную строку. Не скажу, что данная возможность мне нужна как глоток воды страннику в пустыне, но всё же...