0

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

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

有任何想法吗?所有帮助表示赞赏!

4

1 回答 1

0

使用 Spy++ 解决此问题,注意 WM_SETCURSOR 消息。滚动条没有任何理由更改光标,您会看到它返回 FALSE(在 Spy++ 跟踪中显示为 'fHaltProcessing:False)。这会导致将消息发送到控件的父级。跟随跟踪,最终你会遇到一个返回 TRUE 的父窗口。那是改变光标的那个。

很有可能这将是 Outlook。从你的问题中不知道为什么它认为 UI 已经死了。从 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);
    }
}
于 2011-01-30T17:43:07.860 回答