4

C# を使用してマウス カーソルにアタッチされたツールチップを取得するにはどうすればよいですか? 次のような効果を実現しようとしています。Ctrl / Shift / Alt キーのステータスを示す小さなツールチップです。

現在 を使用してTooltipいますが、テキストが 2 行程度でないと表示されません。

tt = new ToolTip();
tt.AutomaticDelay = 0;
tt.ShowAlways = true;
tt.SetToolTip(this, " ");

マウスの移動:

tt.ToolTipTitle = ".....";

ツールチップ

4

1 に答える 1

3

したがって、これを純粋にマネージ コードで行う方法はないと思います。あなたはネイティブに行かなければならないでしょう。

私の見方では、2つのオプションがあります。

  1. P/ SendMessage関数を呼び出します。hwndをターゲット ウィンドウに設定し、TTM_ADDTOOLメッセージと lParam のTOOLINFO構造体を渡します。これは、作成していない外部ウィンドウ (アプリにないウィンドウ) にツールヒントが必要な場合に便利です。FindWindowを呼び出すことで、その hwnd を取得できます。

    この記事で、これらすべてがどのように行われるかをご覧ください P/Invoke を追加するだけです。

  2. CreateWindowEx()どうやら、関数をクラス名として使用できTOOLTIPS_CLASS、ツールチップが生成されます。このようなもの:

    HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
                            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            hwndParent, NULL, hinstMyDll,
                            NULL);
    
    SetWindowPos(hwndTip, HWND_TOPMOST,0, 0, 0, 0,
             SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    

    ここで記事全体を参照してください: http://msdn.microsoft.com/en-us/library/windows/desktop/bb760250(v=vs.85).aspx


速度を上げるには、.NET コードで次のようなものを定義します。ここから定義を取得しました。

私の回答で言及したすべての構造は、同じ Web サイト (または他の同様のウェブサイト) にあります。コードでそれらをすべて定義したら、私の回答にある C サンプルを簡単に転置/移植することができます。リンクされた記事:

class NativeFunctions 
{
[DllImport("user32.dll", SetLastError=true)]
static extern IntPtr CreateWindowEx(
   WindowStylesEx dwExStyle, 
   string lpClassName,
   string lpWindowName, 
   WindowStyles dwStyle, 
   int x, 
   int y, 
   int nWidth, 
   int nHeight,
   IntPtr hWndParent, 
   IntPtr hMenu, 
   IntPtr hInstance, 
   IntPtr lpParam);
}
于 2012-06-19T10:14:45.090 に答える