检测气球工具提示是否可见

时间:2013-08-20 12:32:42

标签: vb6 tooltip popup-balloons balloon-tip

我的程序大量使用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

1 个答案:

答案 0 :(得分:0)

您确实应该隔离影响您的应用程序的注册表项并进行适当的更改。如果这是你最终通过支持做的事情,也许强行做出改变是很自然的。

但更好的想法是编写自己的解决方案,例如,创建自己的窗口,直接根据您的应用程序定制。如果没有Windows一直处理你,它会给你你想要的力量。