[英]Detecting if balloon tooltip is visible
我的程序大量使用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不會一直困擾您,它會為您提供所需的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.