2010-05-14 110 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