Tooltip附加到C#中的鼠标

如何获得使用C#连接到鼠标光标的工具提示? 我试图达到像下面的效果,一个小工具提示显示Ctrl / Shift / Alt键的状态。

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

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

在鼠标移动中:

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

提示

Solutions Collecting From Web of "Tooltip附加到C#中的鼠标"

所以我不认为有什么办法可以完全使用托管代码。 你将不得不去土生土长。

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

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

    看看这篇文章是如何完成的。 你只需要添加P / Invoke。

  2. 显然你可以使用TOOLTIPS_CLASSCreateWindowEx()函数作为类名,它会为你生成一个工具提示。 像这样的东西:

     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代码中定义类似这样的东西。 我从这里得到了定义。

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