如何使用C#获取附加到鼠标光标的工具提示?我正在尝试实现如下效果,一个显示Ctrl / Shift / Alt键状态的小工具提示。
我目前正在使用Tooltip
但它拒绝显示,除非它有大约2行文字。
tt = new ToolTip();
tt.AutomaticDelay = 0;
tt.ShowAlways = true;
tt.SetToolTip(this, " ");
鼠标移动:
tt.ToolTipTitle = ".....";
答案 0 :(得分:3)
所以我认为你无法用托管代码完全实现这一点。你必须要原生。
我看到的方式有两种选择。
P /调用SendMessage函数。将hwnd
设置为目标窗口,并为lParam传递TTM_ADDTOOL
消息和TOOLINFO结构。当您想要在未创建的外部窗口(不在您的应用程序中)的工具提示时,这非常有用。你可以通过致电FindWindow来获得它的hwnd。
在this article.中查看所有这一切是如何完成的。您只需要添加P / Invoke。
显然,您可以将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代码中定义类似的内容。我从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);
}