4

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

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

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

在鼠标移动中:

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

工具提示

4

1 回答 1

3

所以我认为没有任何方法可以纯粹使用托管代码来做到这一点。你将不得不去本土。

在我看来,有两种选择。

  1. P/调用SendMessage函数。将 设置hwnd为您的目标窗口并为 lParam 传递一条TTM_ADDTOOL消息和一个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 代码中定义类似的内容。我从这里得到了定义。

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