Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Wing от 07-02-2014, 14:39:14

Название: Не обновляется заголовок окна
Отправлено: Wing от 07-02-2014, 14:39:14
Здравствуйте!

Столкнулся с такой проблемой, что на Win7-x64 не обновляется заголовок окна после вызова SetWindowText().
В 32-битной версии это работает, а при переводе на 64 бита неожиданный сюрприз.
При вызове функции окно не обновляется, но, если потом мышкой зайти на заголовок, он обновится и заданный текст проявится.
Если поставить схему "Классическая" в персонализации ОС, то поведение меняется:
текст меняется сразу, отрисовывается слева на синем фоне, а при заходе мышкой на заголовок - отрисовывается на черном фоне по центру.
Почему-то автокад не обновляет в 64-битной версии область заголовка.
Автокад 2010 версия D.309.0. русский version 3

пробовал все из этого набора, но не помогает:
Код - C++ [Выбрать]
  1.         __declspec( align( 32 ) ) wchar_t text[256] = L"showtest() - W";
  2.  
  3.         HWND hwnd = adsw_acadMainWnd();
  4.        
  5.         //SetWindowText(hwnd, "showtest()");
  6.         SetWindowTextW(hwnd, text);
  7.         //SetWindowPos(hwnd, HWND_BOTTOM, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE|SWP_DRAWFRAME|SWP_SHOWWINDOW|SWP_FRAMECHANGED ); //
  8.         RedrawWindow( hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME );
  9.         //SendMessage(adsw_acadMainWnd(), WM_SETFOCUS, 0, 0);
  10.         //SetWindowPos(hwnd, HWND_TOP, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE|SWP_DRAWFRAME|SWP_SHOWWINDOW|SWP_FRAMECHANGED );
  11.         return;

может, надо как-то по-другому обновлять заголовок окна автокада?
Идея менять имя чертежа не кажется удачной, потому что в конце работы оно будет в окне предложения сохранить изменения.

подходит вариант создать свое поле в статус-строке или подобной.
Требуется отображать строку длиной 50-200 символов постоянно.
если так проще, подскажите пример, где создается такое поле.

Спасибо.
Название: Re: Не обновляется заголовок окна
Отправлено: Николай Горлов от 07-02-2014, 15:27:30
попробуй так
acedGetAcadFrame()->SetWindowText(L"AAAAAAAAAAA");
Название: Re: Не обновляется заголовок окна
Отправлено: Wing от 07-02-2014, 16:24:29
попробовал, такое же поведение
Название: Re: Не обновляется заголовок окна
Отправлено: Александр Ривилис от 08-02-2014, 05:26:41
может, надо как-то по-другому обновлять заголовок окна автокада?
Думаю что всё это не поможет. AutoCAD начиная уже не помню с какой версии отслеживает изменение в заголовке окна и перерисовывает его. Возможно здесь поможет какой-нибудь хук или сабклассинг. Но моя интуиция подсказывает, что всё это будет достаточно ненадежно.

Я не знаю устроит ли тебя такой вариант, но ты можешь установить системную переменную MODEMACRO (http://docs.autodesk.com/BLDSYS/2014/RUS/files/GUID-3637B188-6520-4BCB-B40F-1E0428AE34AD.htm) в нужное тебе значение. Это было бы самым простым решением.
Есть еще функция acedGrText (http://docs.autodesk.com/ACDMAC/2011/ENU/ObjectARX%20Reference/acedGrText@int@ACHAR__@int.html), которая с первым параметром -1 дает результат аналогичный использованию MODEMACRO.
А вообще все зависит от того, что тебе нужно писать. Но в первую очередь задумайся над тем нужно ли это писать вообще или можно без этого обойтись...
Название: Re: Не обновляется заголовок окна
Отправлено: Wing от 10-02-2014, 08:18:53
Вариант с acedGrText подошел.

Спасибо, Александр.

Причиной такого поведения скорее всего то, что что-то произошло с моей виндой. Сегодня с утра просмотрщик фотографий внезапно отказался отрисовывать кнопки внизу после изменения размера окна, проявлялись они также как и обновления заголовка автокада - по мере прохождения мышкой по их местам. Вероятно, баг в обновлении, который, может быть, со следующим обновлением уйдет. Автокад я кстати тоже пробовал переставлять - не помогало.