1
我正在从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相信您从是不可见的鼠标造成任何鼠标事件被传递给它下面的窗口。 (但只有当两个窗口来自同一进程)
我使用System.Windows.Forms.Tooltip类来显示工具提示,似乎我不能覆盖工具提示窗口的wndproc。 – deerchao 2010-05-14 06:09:23
我设法使用我自己的窗体作为工具提示窗口。你的答案,和http://stackoverflow.com/questions/156046/show-a-form-without-stealing-focus-in-c帮助了很多。 – deerchao 2010-05-14 10:51:26
如果您使用'Tooltip'类,则根本不应该有这个问题。 – SLaks 2010-05-14 13:47:40