【问题标题】:Detecting if balloon tooltip is visible检测气球工具提示是否可见
【发布时间】:2013-08-20 12:32:41
【问题描述】:

我的程序大量使用了 Windows 内置的气球工具提示,但在某些系统上它们只是不显示。这可能有很多不同的原因(例如:EnableBalloonTips、ShowInfoTip、DisablePreviewDesktop、TaskbarNoNotification 都是可能产生影响的不同注册表项),因此在安装过程中几乎不可能更正这些设置。

所以我的替代方法是简单地测试气球是否可见,如果不可见,则显示一条消息,他们应该联系支持人员。然而,我在工具提示的 hWnd 上使用的所有方法(IsWindowVisible、GetActiveWindow 等)都返回气球是可见的,即使在它不可见的情况下也是如此。我怀疑这与 Windows 将父级的 hWnd 分配给气球有关,那么如何检查其实际显示是否正确?

Public Sub Create(ByVal hWndParent As Long, _
  Optional ByVal bAlwaysTip As Boolean = True, _
  Optional ByVal bBalloonTip As Boolean = True)

  Dim nFlags As Long

  ' Wir möchten kein normales Fenster :-)
  nFlags = WS_POPUP Or TTS_NOPREFIX

  ' Falls der ToolTip auch bei deaktiviertem 
  ' Control erscheinen soll...
  If bAlwaysTip Then nFlags = nFlags Or TTS_ALWAYSTIP

  ' Falls ein "moderner" Balloon-ToolTip erwünscht...
  If bBalloonTip Then nFlags = nFlags Or TTS_BALLOON

  ' Window-Handle erstellen  
  m_hWnd = CreateWindowEx(0, "tooltips_class32", 0, _
    nFlags, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, _
    CW_USEDEFAULT, hWndParent, 0, App.hInstance, 0)

  ' maximale Fensterbreite festlegen
  SendMessageLong m_hWnd, TTM_SETMAXTIPWIDTH, 0, m_lMaxWidth
End Sub

Public Sub SetToolTipText(hWnd As Long, ByVal strText As String)

    Dim udtToolInfo As TOOLINFO
    With udtToolInfo
        .hWnd = hWnd
        .uId = hWnd
        .lpszText = strText
        .cbSize = Len(udtToolInfo)
    End With

    SendMessage m_hWnd, TTM_UPDATETIPTEXTA, 0, udtToolInfo

End Sub

【问题讨论】:

  • 你能展示一些你用来创建工具提示的代码吗?也许创建调用或显示调用会产生一个你没有注意的错误,这可能是有用的。
  • @PhoenixX_2 只有极少数的用户有这个问题,在大多数情况下更改注册表设置可以解决问题,所以我认为排除了代码中的任何错误。
  • 我并不是说你会有错误。我的意思是某些函数的返回值可能表明它们的设置确实不允许弹出气球。
  • @PhoenixX_2 啊,我看错了。气球是使用默认的 CreateWindow API 调用创建的,在禁用气球的系统上似乎不会返回错误,并且所有进一步的通信(设置文本、显示/隐藏气球)都是通过 SendMessage API 调用,它从不返回值,因为消息是异步传递的,所以调用在知道结果之前就返回了。

标签: vb6 tooltip popup-balloons balloon-tip


【解决方案1】:

您确实应该隔离影响您的应用程序的注册表项并进行适当的更改。如果这就是您最终通过支持所做的事情,那么强制进行更改可能是很自然的。

但是更好的主意是编写您自己的解决方案,例如,创建您自己的直接为您的应用程序量身定制的窗口。它会为您提供所需的功能,而无需 Windows 一直在处理您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多