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

2023-12-31

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

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

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

在鼠标移动中:

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

所以我认为没有任何方法可以纯粹使用托管代码来做到这一点。你必须成为本地人。

我认为有两种选择。

  1. P/调用发信息 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx功能。设置hwnd到你的目标窗口并传入TTM_ADDTOOL消息和一个TOOLINFO http://msdn.microsoft.com/en-us/library/windows/desktop/bb760256%28v=vs.85%29.aspxlParam 的结构。当您想要在尚未创建的外部窗口(不在您的应用程序中)上显示工具提示时,这非常有用。你可以通过调用获取它的hwnd查找窗口 http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx.

    看看这一切是如何完成的本文。 http://www.codeproject.com/Articles/2417/Display-ToolTip-in-any-place-on-the-screen您只需添加 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 http://msdn.microsoft.com/en-us/library/windows/desktop/bb760250(v=vs.85).aspx


为了让您加快速度,您需要在 .NET 代码中定义类似的内容。我得到了定义here http://www.pinvoke.net/default.aspx/user32/createwindowex.html?diff=y.

您将在同一网站(或其他类似网站)上找到我在答案中提到的所有结构。一旦您在代码中定义了所有结构,您就可以轻松转置/移植我答案中的 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中附加到鼠标的工具提示 的相关文章

  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 批处理文件 - 读取特定行,并将该行中的特定字符串保存为变量

    有没有办法让 for f 循环 或其他任何东西 读取特定行 这是我到目前为止的代码 它读取每一行的第一个单词 echo off set file readtest txt for f tokens 1 delims A in file do
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 让 Jenkins 对远程用户不可见

    我的本地 Windows 设备上有一个 Jenkins 服务器 但我想让它对外界不可见 有关服务器的办公室规则 明显且不隐晦的 效果令人满意的方法是设置防火墙规则来阻止对其端口的传入访问 但我认为必须有一个 Jenkins 设置来阻止它向除
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐