【问题标题】:Windows Tooltips with style TTS_BALLOON not shown on some installations在某些安装中未显示 TTS_BALLOON 样式的 Windows 工具提示
【发布时间】:2011-05-26 10:58:16
【问题描述】:

我维护一个显示工具提示的 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 设置为整个屏幕的坐标,因为 windows 将工具提示的大小调整为包含文本。)

编辑: 我们实际上向我们的软件添加了一个配置属性,它只是添加或删除 TTS_BALLOON 属性。这解决了相关机器上的问题。

【问题讨论】:

  • 我必须承认我不记得了,但是如果您不使用 Luna(Playskool 任务栏/标题按钮),XP 是否会显示气泡式工具提示?
  • 确实,我会问他们使用的是什么操作系统(可能是 Win 2k?)以及他们是在运行视觉样式还是在 Windows Classic 中。
  • @David:已经在帖子里了:“相关机器运行Windows XP,并定期更新。”
  • @RED SOFT ADAIR Windows Classic 怎么样?
  • @罗伯特。是的,Win32 API 使用本文提供的代码支持气球/气泡样式提示。它们显示为一个圆形矩形,在相关点上有一个圆锥。

标签: visual-studio winapi windows-xp tooltip


【解决方案1】:

最佳解决方案可以在here找到。

要禁用工具提示气球,请将EnableBalloonTips 设置为1

【讨论】:

  • 这不是问题的解决方案。它需要管理步骤来禁用气球。问题是,为什么在某些机床上,工具顶部不起作用。
猜你喜欢
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多