0

AutoScrollの機能を使用してSystem.Windows.Forms.Panel、カスタムのスクロール可能なコントロールを作成しています。スクロールバーにカーソルを合わせると、カーソルが「ビジー」カーソルに変わることを除けば、すべてが正常に機能しています。ScrollableControlスクロールバーインスタンス(基本クラス内にある)を取得できないため、この動作をオーバーライドすることはできないようです。falseに設定Application.UseWaitCursorしてみましたが、何も変わりません。

このコントロールは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 に答える