我维护一个显示工具提示的Win32桌面应用程序。到目前为止,这在许多XP和Windows 7安装上运行得很好。
我们现在从一些客户那里得到报告,他们没有看到我们的工具提示。“查看矩形工具提示”(没有TTS_BALLOON属性)。但是用TTS_BALLOON创建的那些是不可见的。由客户报告发送的日志文件( CreateWindowEx返回有效的windows句柄)以及包含的坐标和字符串都是正确的。有关机器运行Windows,并定期更新。
有没有人遇到过类似的行为?
我们如何解决这个问题呢?
源代码:
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设置为整个屏幕的坐标,因为windows将工具提示调整为包含的文本。)
编辑:我们实际上向我们的软件添加了一个配置属性,它只会添加或删除TTS_BALLOON属性。这解决了有关机器上的问题。
发布于 2012-07-04 16:42:17
最好的解决方案可以找到这里。
若要禁用工具提示气球,请将EnableBalloonTips设置为1
https://stackoverflow.com/questions/4459429
复制相似问题