Я поддерживаю настольное приложение Win32, которое показывает всплывающие подсказки. Это пока работает довольно хорошо на многих установках XP и Windows 7.
Теперь мы получаем сообщения от нескольких клиентов о том, что они не видят наши подсказки. Всплывающая подсказка «Посмотрите прямоугольник» (которая не имеет атрибута TTS_BALLOON
. Но те, которые созданы с TTS_BALLOON
, не видны. Файлы журнала, отправленные отчетом клиента, который CreateWindowEx
возвращает действительный дескриптор окна, а также координаты и содержащиеся строки верны.
Соответствующая машина работает под управлением Windows XP и регулярно обновляется.
Кто-нибудь сталкивался с подобным поведением?
Как мы можем решить эту проблему?
Исходный код:
gHintInfo.hwnd = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL,
(HINSTANCE)xvt_vobj_get_attr(TASK_WIN, ATTR_WIN_INSTANCE),
NULL);
Trace(1, "\n### DrawHint %d, hwnd = %08x, Text =\n%s\n###\n\n", __LINE__, gHintInfo.hwnd, tx);
if (gHintInfo.hwnd != NULL)
{
TOOLINFO ti;
ti.cbSize = sizeof (ti);
ti.uFlags = TTF_TRANSPARENT | TTF_ABSOLUTE;
ti.hwnd = hwndParent;
ti.uId = 0;
ti.hinst = NULL;
ti.lpszText = (char *) tx;
GetClientRect (hwndParent, &ti.rect);
dbgrct(ti.rect);
dbgpnt(gHintInfo.LastHintLoc);
SendMessage(gHintInfo.hwnd, TTM_TRACKPOSITION,0, MAKELONG(gHintInfo.LastHintLoc.v, gHintInfo.LastHintLoc.h));
SendMessage (gHintInfo.hwnd, TTM_ADDTOOL, 0, (long) &ti);
SendMessage (gHintInfo.hwnd, TTM_SETDELAYTIME, TTDT_AUTOMATIC, -1);
SendMessage (gHintInfo.hwnd, TTM_SETMAXTIPWIDTH, 0, 500);
SendMessage (gHintInfo.hwnd, TTM_TRACKACTIVATE, TRUE, (long) &ti);
}
Вывод журнала, созданный этим кодом на компьютере, который не отображает всплывающие подсказки:
### DrawHint 474, hwnd = 00090112, Text =
Some text with
multiple lines
###
ti.rect left = 0, top = 0, right = 1280, bottom = 978
gHintInfo.LastHintLoc h = 295, v = 539
(Мы устанавливаем ti.rect в координаты всего экрана, так как окна в любом случае изменяют размер всплывающей подсказки на содержащий текст.)
EDIT:
Мы фактически добавили свойство конфигурации в наше Программное обеспечение, которое не делает ничего, кроме добавления или удаления атрибута TTS_BALLOON. Это решает проблему на соответствующих машинах.