フォームの任意の部分をクリックしてドラッグすることで移動できる Windows フォームがあります。キャプションをクリックしたとフォームに思わせるために、WndProc をオーバーライドし、NCHITTEST 関数の結果を HTCAPTION に設定する方法を使用しました。これにより、ドラッグが可能になります。
このコードはうまく機能し、以下のとおりです。
protected override void WndProc(ref Message msg)
{
if (msg.Msg == (int)WinAPI.NCHITTEST)
{
DefWndProc(ref msg);
if ((int)msg.Result == (int)MousePositionCodes.HTCLIENT)
{
msg.Result = (IntPtr)MousePositionCodes.HTCAPTION;
return;
}
}
}
base.WndProc(ref msg);
}
この問題は、ToolStripPanel をフォームにドッキングすると発生します (これはドラッグ可能なツールバーとして機能します)。フォーム全体をドラッグ モードにするために必要なメッセージを渡すには、ToolStrip でカバーされていない ToolStripPanel の任意の部分が必要です。
独自の ToolStripContainer クラスを作成して WndProc 関数をオーバーライドし、上記と同じ関数を使用しようとしましたが、ToolStripContainer がフォーム内でドラッグ モードになり、これは目的の機能ではありません。
また、NCHITTEST メッセージを親に渡し、現在のマウス座標で新しいメッセージを作成し、WinAPI と親のウィンドウ ハンドルを使用して親に送信しようとしました。
ここで簡単なものが欠けている必要があります...誰にもアイデアはありますか?