4

我想在具有最大化窗口状态的父级中打开一个子窗体。

我不想让用户最小化/最大化/关闭那个子窗口,

所以我设置BorderStyle = None了 childwindow 并且还设置了MaximizeBoxMinimizeBox属性到False, 也设置了WindowState = Maximized

但是,当我运行该程序时,它会显示该子窗体的所有Minimize,RestoreClose按钮处于最大化状态。

但是如果我点击Restore Down然后那个childForm没有边框..现在也没有办法将它恢复到最大化状态..

我错过了什么吗?这是一个错误吗?使它正常工作的正确方法是什么?

4

4 回答 4

1

试试这个。

protected override void WndProc(ref Message m)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MOVE = 0xf010;
    switch (m.Msg)
    {
        case WM_SYSCOMMAND:
            int command = m.WParam.ToInt32() & 0xfff0;
            if (command == SC_MOVE)
                return;
            break;

    }
    base.WndProc(ref m);
}
于 2016-11-10T07:37:40.747 回答
0

那么您可以创建自己的表单(自定义表单),然后将该自定义表单继承到 mdi 子表单中

您必须将以下代码放在“自定义表单”中

   public partial class BaseForm : Form
   {
       public BaseForm()
       {
           InitializeComponent();
           StartPosition = FormStartPosition.WindowsDefaultLocation;
           MaximizeBox = false;
           Width = 806;
          //Width = 850;
          //Height = 760;
           Height = 730;
          //Width = 790;
          //Height = 617;
    }

//[DllImport("user32.dll")]
//[return: MarshalAs(UnmanagedType.Bool)]
//private static extern bool ShowScrollBar(IntPtr hWnd, int wBar, bool bShow);
//private enum ScrollBarDirection { SB_HORZ = 0, SB_VERT = 1, SB_CTL = 2, SB_BOTH = 3 } 


protected override void WndProc(ref Message m)
{
  const int WM_SYSCOMMAND = 0x0112;
  const int SC_MOVE = 0xF010;
  //ShowScrollBar(this.Handle, (int)ScrollBarDirection.SB_BOTH, false);
  switch (m.Msg)
  {
    case WM_SYSCOMMAND:
      int command = m.WParam.ToInt32() & 0xfff0;
      if (command == SC_MOVE)
        return;
      break;
   }
   base.WndProc(ref m);
 }
}

你必须而且应该把你的 mdi 子窗体minimum size to '0'size to Width = 806; Height = 730;

我希望它会帮助你...

于 2011-10-22T12:00:44.550 回答
0

不要将其设置为最大化,只需设置 MdiParent 的宽度和高度...

Height = this.Height;
Width = this.Width;

this.Width 应该是父窗体

希望这会有所帮助,如果没有。给我发电子邮件:)

beanlovin@gmail.com

于 2011-11-01T14:34:12.100 回答
-1
Form1 fr = new Form1(); 
fr.MdiParent = this; //set form's parent to Mdiform
fr.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //set form without maximize,minimize and close button
fr.Dock = DockStyle.Fill; //set form's dock property to fill
fr.Show();
于 2014-06-17T11:56:28.990 回答