1

1280x800 に収まる MDI 親コンテナー (フォーム スタイル: なし) があります。子フォームは、子の端と親の間のおそらく 1 ピクセルまたは 2 ピクセルのパディングにちょうど収まります。シームレスに見えることを意味します。

別のフォームをドラッグ可能にする方法は知っていますが (フォームのどこをクリックして押したままにしても)、子が MDI の親に画面上のどこに移動するかを指示することは可能ですか? その理由は、ユーザーがクリックできる親に何もないためです。オブジェクトを親に追加することはできません (メニューなど)。目的のデザインと競合するためです。

これに関する提案はありますか?目標は、ユーザーが子の任意の場所をクリックしてドラッグし、アプリケーション全体を移動できるようにすることです。

4

1 に答える 1

1

これを試して:

public partial class Form1 : Form { 
  private const int WM_NCLBUTTONDOWN = 0xA1;
  private const int HT_CAPTION = 0x2;

  [DllImportAttribute("user32.dll")]
  private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
  [DllImportAttribute("user32.dll")]
  private static extern bool ReleaseCapture();

  public Form1() {
    InitializeComponent();
    Form f = new Form();
    f.MouseDown += ChildForm_MouseDown;
    f.MdiParent = this;
    f.Show();
  }

  void ChildForm_MouseDown(object sender, MouseEventArgs e) {
    if (e.Button == MouseButtons.Left) {
      ReleaseCapture();
      SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    }
  }
}

MDI親フォームは、子のmousedownイベントをリッスンしており、ユーザーが子フォームをクリックすると、ユーザーがメインフォームのタイトルバーをクリックしているように動作します。

于 2012-10-21T18:48:12.283 に答える