0

これを正しく表現できるかどうかはわかりませんが、ここに行きます。

いくつかのテキスト ボックスとスクロール バー付きのパネルを持つアプリケーションがあります。マウスのスクロール ホイールが常にパネルに影響するようにします。これを行う方法はありますか?現在、パネルからテキスト ボックスにフォーカスを変更すると、パネルのスクロール ホイールが機能しなくなります。

前もって感謝します

4

1 に答える 1

0

これは PreFilterMessage で行うことができます。まず、次のように IMessageFilter を実装するようにフォームを変更します。

public partial class Form1 : Form, IMessageFilter

次に、コンストラクターでメッセージ フィルターを追加します。

public Form1()
{
  InitializeComponent();
  Application.AddMessageFilter(this);
}

次に、IMessageFilter インターフェイスを実装します。

public bool PreFilterMessage(ref Message m)
{
  if (m.Msg == WM_MOUSEWHEEL)
  {
    SendMessage(panel1.Handle, m.Msg, m.WParam, m.LParam);
    return true;
  }
  return false;
}

また、次のものが必要になります。

private const int WM_MOUSEWHEEL = 0x020A;
[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point pt);
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
于 2012-07-03T03:00:52.760 に答える