私のプログラムは 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