Не обновляется заголовок окна

Автор Тема: Не обновляется заголовок окна  (Прочитано 8410 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн WingАвтор темы

  • ADN Club
  • Сообщений: 17
  • Карма: 0
Здравствуйте!

Столкнулся с такой проблемой, что на 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 символов постоянно.
если так проще, подскажите пример, где создается такое поле.

Спасибо.
« Последнее редактирование: 08-02-2014, 05:40:53 от Александр Ривилис »

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: Не обновляется заголовок окна
« Ответ #1 : 07-02-2014, 15:27:30 »
попробуй так
acedGetAcadFrame()->SetWindowText(L"AAAAAAAAAAA");

Оффлайн WingАвтор темы

  • ADN Club
  • Сообщений: 17
  • Карма: 0
Re: Не обновляется заголовок окна
« Ответ #2 : 07-02-2014, 16:24:29 »
попробовал, такое же поведение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не обновляется заголовок окна
« Ответ #3 : 08-02-2014, 05:26:41 »
может, надо как-то по-другому обновлять заголовок окна автокада?
Думаю что всё это не поможет. AutoCAD начиная уже не помню с какой версии отслеживает изменение в заголовке окна и перерисовывает его. Возможно здесь поможет какой-нибудь хук или сабклассинг. Но моя интуиция подсказывает, что всё это будет достаточно ненадежно.

Я не знаю устроит ли тебя такой вариант, но ты можешь установить системную переменную MODEMACRO в нужное тебе значение. Это было бы самым простым решением.
Есть еще функция acedGrText, которая с первым параметром -1 дает результат аналогичный использованию MODEMACRO.
А вообще все зависит от того, что тебе нужно писать. Но в первую очередь задумайся над тем нужно ли это писать вообще или можно без этого обойтись...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн WingАвтор темы

  • ADN Club
  • Сообщений: 17
  • Карма: 0
Re: Не обновляется заголовок окна
« Ответ #4 : 10-02-2014, 08:18:53 »
Вариант с acedGrText подошел.

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

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