我正在使用AutoScroll
中的System.Windows.Forms.Panel
功能来构建自定义可滚动控件。一切都工作得很好,除了当我将鼠标悬停在滚动条上时,光标变为“忙”光标。似乎无法覆盖此行为,因为我无法获取滚动条实例(它们位于ScrollableControl
基类中)。我已经尝试将Application.UseWaitCursor
设置为false,但这并没有改变任何内容。
值得一提的是,此控件在ActiveX控件中运行,而ActiveX控件又在Outlook中运行。其他一切都按预期工作,只是这件小事让我失望......
有什么想法吗?所有帮助表示赞赏!
答案 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);
}
}