zoukankan      html  css  js  c++  java
  • Winform下去除MDI窗体边框

    做项目中间遇到了MDI窗体内边框的问题,经过苦苦寻找,最终得到了解决方案

    在Main窗体中调用API

      // Win32 Constants    
            private const int GWL_STYLE = -16;
            private const int GWL_EXSTYLE = -20;
            private const int WS_BORDER = 0x00800000;
            private const int WS_EX_CLIENTEDGE = 0x00000200;
            private const uint SWP_NOSIZE = 0x0001;
            private const uint SWP_NOMOVE = 0x0002;
            private const uint SWP_NOZORDER = 0x0004;
            private const uint SWP_NOACTIVATE = 0x0010;
            private const uint SWP_FRAMECHANGED = 0x0020;
            private const uint SWP_NOOWNERZORDER = 0x0200;
    
    
            // Win32 方法    
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            private static extern int GetWindowLong(IntPtr hWnd, int Index);
    
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            private static extern int SetWindowLong(IntPtr hWnd, int Index, int Value);
    
            [DllImport("user32.dll", ExactSpelling = true)]
            private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
                int X, int Y, int cx, int cy, uint uFlags);


    获取到API后在Form_Load事件中加入如下代码
      //获取mdi客户区    
                for (int i = 0; i < this.Controls.Count; i++)
                {
                    var mdiClientForm = this.Controls[i] as MdiClient;
                    if (mdiClientForm == null) continue;
                    // 找到了mdi客户区    
                    // 取得客户区的边框    
                    int style = GetWindowLong(mdiClientForm.Handle, GWL_STYLE);
                    int exStyle = GetWindowLong(mdiClientForm.Handle, GWL_EXSTYLE);
                    style &= ~WS_BORDER;
                    exStyle &= ~WS_EX_CLIENTEDGE;
    
                    // 调用win32设定样式    
                    SetWindowLong(mdiClientForm.Handle, GWL_STYLE, style);
                    SetWindowLong(mdiClientForm.Handle, GWL_EXSTYLE, exStyle);
    
                    // 更新客户区    
                    SetWindowPos(mdiClientForm.Handle, IntPtr.Zero, 0, 0, 0, 0,
                        SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
                        SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
                    UpdateStyles();
                    break;
                }

    重新运行程序,OK  

  • 相关阅读:
    注意
    被虐的很惨
    在cmd中可以运行java,但是不能用javac
    Linux常用命令
    安装JDK和eclipse
    重装win7
    小希的迷宫
    并查集——The Suspects
    BFS宽度优先搜索
    括号匹配
  • 原文地址:https://www.cnblogs.com/bryantzx/p/7845300.html
Copyright © 2011-2022 走看看