2011-01-30 146 views
0

我在System.Windows.Forms.Panel中使用AutoScroll功能來構建自定義的可滾動控件。一切工作正常,除了當我將鼠標懸停在滾動條上時,光標變爲「忙碌」遊標。似乎沒有可能重寫此行爲,因爲我無法獲得滾動條實例(它們在ScrollableControl基類中)。我嘗試將Application.UseWaitCursor設置爲false,但這不會改變任何內容。鼠標懸停在ScrollableControl的滾動條上時忙光標

可能值得一提的是,此控件在ActiveX控件內運行,而ActiveX控件又在Outlook內運行。其他一切都按預期工作,只是這個小東西讓我失望...

任何想法?所有幫助讚賞!

回答

0

用Spy ++對此進行故障排除,注意WM_SETCURSOR消息。滾動條沒有任何理由改變遊標,你會看到它返回FALSE(在Spy ++跟蹤中顯示爲'fHaltProcessing:False)。這導致消息被髮送到控件的父級。跟蹤跟蹤,最終你會碰到一個返回TRUE的父窗口。這是改變光標的那個。

賠率是體面的,這將是Outlook。不知道你的問題爲什麼它認爲用戶界面已經死亡。從Panel派生你自己的類並重寫WndProc()來捕獲消息將是一種解決方法。然而,我會首先關注Outlook。

using System; 
using System.Windows.Forms; 

class MyPanel : Panel { 
    protected override void WndProc(ref Message m) { 
     if (m.Msg == 0x20) { // Trap WM_SETCURSOR 
      Cursor.Current = Cursors.Default; 
      m.Result = (IntPtr)1; 
     } 
     else base.WndProc(ref m); 
    } 
} 
+0

漢斯,謝謝你的建議。我用Spy ++檢查過,並且有AutoScroll的窗口似乎返回TRUE。但是,我似乎無法捕獲WndProc消息... – Phil 2011-01-30 18:52:43