2

ずっと前にウェブで見つけたコードについて、あなたの助けが必要です。悲しいことに、それがどこから来たのか覚えていません:(プロジェクトでボーダレスフォームを移動するには、次のコードを切り取って使用します:

protected override void OnMouseDown(MouseEventArgs e)
{
     base.OnMouseDown(e);
     if (e.Button == System.Windows.Forms.MouseButtons.Left)
          {
               this.Capture = false;
               Message msg = Message.Create(this.Handle, 0XA1, new IntPtr(2), IntPtr.Zero);
               this.WndProc(ref msg);
          }
}

私の問題は、コードがどのように機能するかを完全に理解していないことです。私が理解している限り、マウスボタンがフォーム上でクリックされると、イベントがアクティブになります。次に、マウス クリックが左クリックの場合、クエリに従います。そして、そこから、次のコードが何をするのかわかりません:(

4

3 に答える 3

2

this.Capture=false は、マウス イベントのキャプチャを停止するよう OS に指示します。Message.Create は、現在のアプリケーションのメッセージ ループに送信される新しいメッセージを作成します。0xA1 は WM_NCLBUTTONDOWN です。これは、非クライアントの左ボタン ダウン メッセージです。つまり、欠落している境界線でマウスの左ボタンをクリックすることをシミュレートしました。

その後、Windows が残りのプロセスを開始します。

于 2015-05-18T17:24:17.450 に答える
1

基本的なレベルでは、メッセージをウィンドウに送信し、ウィンドウに処理させます。

0xA1 (WM_NCLBUTTONDOWN) を指定し、パラメーター (HTCAPTION) として 0x02 を送信することで、キャプション バーにいるとプロセスを騙します。キャプション バーをドラッグするとウィンドウが移動するため、コードを使用してウィンドウをドラッグできます。

これを行うサンプル:

C#:フォームとそのコントロールからドラッグする方法は?

http://www.catch22.net/tuts/win32-tips-tricks

于 2015-05-18T17:26:02.697 に答える
0

あなたは基本的にウィンドウにメッセージを投稿しています。少し MSDN を調査したところ、投稿しているメッセージがWM_NCLBUTTONDOWNであることがわかりました。基本的に、下にあるウィンドウに、マウスの左ボタンが押されていること、およびそれに応答する必要があることを伝えています。その反応は通常、たまたまウィンドウをドラッグしています。

于 2015-05-18T17:24:47.153 に答える