1

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

1 に答える 1

0

実際、アプリケーションに影響を与えるレジストリ キーを分離し、適切な変更を行う必要があります。サポートでそういうことになったら、無理矢理変えてしまうのが自然なのかもしれません。

しかし、さらに良いアイデアは、アプリケーションに直接合わせた独自のウィンドウを作成するなど、独自のソリューションを作成することです。それは、Windows が常にあなたに取り組むことなく、あなたが望む力をあなたに与えるでしょう.

于 2013-08-21T22:24:09.113 に答える