2013-08-20 107 views
1

我的程序大量使用Windows內置氣球工具提示,但在某些系統上它們只是不顯示。這可能有很多不同的原因(例如:EnableBalloonTips,ShowInfoTip,DisablePreviewDesktop,TaskbarNoNotification都是可能會影響到的所有不同的註冊表項),它幾乎不可能在安裝期間更正這些設置。檢測氣球工具提示是否可見

所以我的選擇是簡單地測試氣球是否可見,如果沒有,顯示一條消息,他們應該聯繫支持。然而,我在工具提示(IsWindowVisible,GetActiveWindow等)的hWnd上使用的所有方法都返回了可見的氣球,即使在沒有的情況下也是如此。我懷疑這與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 
+2

你能展示一些你用來創建工具提示的代碼嗎?也許創作調用或顯示調用會產生一個你沒有注意的錯誤,這可能是有用的。 –

+0

@ PhoenixX_2只有很小比例的用戶有這個問題,並且在大多數情況下更改註冊表設置可以解決問題,所以我認爲這可以排除代碼中的任何錯誤。 – Muis

+0

我並不是故意說你會有錯誤。我的意思是某些函數的返回值可能表明它們的設置確實不允許氣球彈出。 –

回答

0

您應該隔離影響您的應用程序的註冊表項並進行相應的更改。如果這就是你最終通過支持完成的事情,那麼強行進行更改也許是很自然的。

但是,更好的想法是編寫自己的解決方案,就像創建自己的窗口一樣,直接爲您的應用程序量身定製。它會給你你想要的力量,而無需Windows一直處理你。