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