簡體   English   中英

檢測氣球工具提示是否可見

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM