鼠标悬停在ScrollableControl中的滚动条上时忙碌的光标

时间:2011-01-30 17:10:46

标签: c# winforms cursor autoscroll

我正在使用AutoScroll中的System.Windows.Forms.Panel功能来构建自定义可滚动控件。一切都工作得很好,除了当我将鼠标悬停在滚动条上时,光标变为“忙”光标。似乎无法覆盖此行为,因为我无法获取滚动条实例(它们位于ScrollableControl基类中)。我已经尝试将Application.UseWaitCursor设置为false,但这并没有改变任何内容。

值得一提的是,此控件在ActiveX控件中运行,而ActiveX控件又在Outlook中运行。其他一切都按预期工作,只是这件小事让我失望......

有什么想法吗?所有帮助表示赞赏!

1 个答案:

答案 0 :(得分: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);
    }
}