【发布时间】:2010-05-14 03:21:24
【问题描述】:
我正在从 ScrollableControl 编写自定义 TreeView。我决定当鼠标悬停在文本太长而无法显示的节点上时显示工具提示。
我发现当显示工具提示时,用户无法单击节点来选择它,因为(我认为)他正在单击工具提示窗口,而不是我的控件。
有没有简单的解决方案?据我所知, System.Windows.Forms.TreeView 没有这个问题。谢谢!
【问题讨论】:
我正在从 ScrollableControl 编写自定义 TreeView。我决定当鼠标悬停在文本太长而无法显示的节点上时显示工具提示。
我发现当显示工具提示时,用户无法单击节点来选择它,因为(我认为)他正在单击工具提示窗口,而不是我的控件。
有没有简单的解决方案?据我所知, System.Windows.Forms.TreeView 没有这个问题。谢谢!
【问题讨论】:
您需要覆盖工具提示表单中的WndProc 并返回HT_TRANSPARENT 以响应WM_NCHITTEST 消息。
例如:
protected override void DefWndProc(ref Message m) {
switch (m.Msg) {
case 0x84://WM_NCHITTTEST
m.Result = new IntPtr(-1); //HT_TRANSPARENT
return;
}
base.DefWndProc(ref m);
}
这将使 Windows 相信您的 from 对鼠标是不可见的,从而导致任何鼠标事件被传递到它下面的窗口。 (但前提是两个窗口都来自同一个进程)
【讨论】:
Tooltip 类,你根本不应该有这个问题。