我的程序大量使用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
您确实应该隔离影响应用程序的注册表项,并进行适当的更改。如果你最终通过支持做到了这一点,也许强行做出改变是很自然的。
但更好的想法是编写自己的解决方案,例如,创建自己的窗口,直接针对您的应用程序进行定制。它会给你想要的力量,而不会让Windows一直困扰你。