代码之家  ›  专栏  ›  技术社区  ›  deerchao

工具提示窃取鼠标单击

  •  1
  • deerchao  · 技术社区  · 15 年前

    我正在从ScrollableControl编写自定义树视图。当鼠标悬停在文本太长而无法显示的节点上时,我决定显示工具提示。

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

    有什么简单的解决办法吗?据我所见,system.windows.forms.treeview没有这个问题。谢谢!

    1 回复  |  直到 15 年前
        1
  •  1
  •   SLaks    15 年前

    你需要重写 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对鼠标是不可见的,从而将任何鼠标事件传递给它下面的窗口。(但仅当两个窗口来自同一进程时)