2010-05-14 109 views
1

我正在从ScrollableControl编写自定义TreeView。当鼠标悬停在文本太长的节点上时,我决定显示工具提示。工具提示抢断鼠标点击

我发现,当显示工具提示时,用户无法点击节点来选择它,因为(我认为)他点击了工具提示窗口,而不是我的控件。

有什么简单的解决方案?据我所见,System.Windows.Forms.TreeView没有这个问题。谢谢!

回答

1

您需要覆盖您的工具提示窗体中的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相信您从是不可见的鼠标造成任何鼠标事件被传递给它下面的窗口。 (但只有当两个窗口来自同一进程)

+0

我使用System.Windows.Forms.Tooltip类来显示工具提示,似乎我不能覆盖工具提示窗口的wndproc。 – deerchao 2010-05-14 06:09:23

+0

我设法使用我自己的窗体作为工具提示窗口。你的答案,和http://stackoverflow.com/questions/156046/show-a-form-without-stealing-focus-in-c帮助了很多。 – deerchao 2010-05-14 10:51:26

+0

如果您使用'Tooltip'类,则根本不应该有这个问题。 – SLaks 2010-05-14 13:47:40