在C#中附加到鼠标的工具提示

时间:2012-06-19 09:47:45

标签: c# .net windows tooltip

如何使用C#获取附加到鼠标光标的工具提示?我正在尝试实现如下效果,一个显示Ctrl / Shift / Alt键状态的小工具提示。

我目前正在使用Tooltip但它拒绝显示,除非它有大约2行文字。

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

鼠标移动:

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

tooltip

1 个答案:

答案 0 :(得分:3)

所以我认为你无法用托管代码完全实现这一点。你必须要原生。

我看到的方式有两种选择。

  1. P /调用SendMessage函数。将hwnd设置为目标窗口,并为lParam传递TTM_ADDTOOL消息和TOOLINFO结构。当您想要在未创建的外部窗口(不在您的应用程序中)的工具提示时,这非常有用。你可以通过致电FindWindow来获得它的hwnd。

    this article.中查看所有这一切是如何完成的。您只需要添加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


  3. 为了让您加快速度,您可能会在.NET代码中定义类似的内容。我从here得到了定义。

    你会在我的答案中找到我在同一个网站(或其他类似网站)中提到的所有结构。一旦你在代码中定义了所有这些结构,你就可以轻松地转置/移植所有的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);
    }