3

少しの産業機器のタッチスクリーンで実行されるWinFormsアプリケーションがあります。今日変更する予定がない歴史的な理由により、表示されるフォームには通常のWindowsタイトルバーがあります。

マウス(つまりタッチスクリーン)を使用しているユーザーがタイトルバーをドラッグしてウィンドウを移動できないようにします。キーボードを使用してウィンドウを移動する他の方法があるかどうかは関係ありません。

これを達成するための最もエレガントな方法は何ですか?タイトルバーにマウスダウンがある場合は、マウスメッセージを覆そうとすることを考えることができます(ただし、NCヒットテストは一見、Winformsでは完全に明白ではないようです)。また、Moveメッセージに何らかの方法で応答することも考えられます。ウィンドウの位置を復元します。

しかし、どちらも不格好に見え、エレガントで明白な何かが欠けているような気がします。

4

5 に答える 5

3

Ncメッセージはまだ私が思うに行きます。Syncfusion の Windows フォーム FAQ には、必要なコードが含まれています。リンクを貼り付けたいのですが、コピーペーストのないiPhoneを使用しています(不平、不平!)

于 2008-10-24T13:02:02.910 に答える
2

わかりました、DanF からの励ましのおかげで、私はこれを思いつきました:

  protected override void  WndProc(ref Message msg)
  {
      const int WM_NCLBUTTONDOWN = 0xa1;

      switch (msg.Msg)
      {
         case WM_NCLBUTTONDOWN:
            // To prevent people moving the window with the mouse 
            // unless CTRL is held
            if (!(GetKeyState((int)Keys.ControlKey) < 0))
            {
               return;
            }
            break;
      }
      base.WndProc(ref msg);
  }

それはただのことのようです。皆さんありがとう。

于 2008-10-24T13:24:50.710 に答える
0

メインフォームイベントのLocationChanged、SizeChangedなどを変更するのはどうですか...

于 2008-10-24T12:53:41.943 に答える
0

アプリケーションで実用的な場合は、ウィンドウを最大化したままにすることができます。

于 2008-10-24T12:56:46.070 に答える
0

解決策に関する @rotard のコメントを処理するには、次のようにマウスでの移動だけWndProcブロックできます。を返す場合は、代わりに returnを返します。WM_NCHITTESTbase.WndProc HTCAPTIONHTNONE

于 2011-01-04T22:01:56.720 に答える