Winform下去除MDI窗體邊框
阿新 • • 發佈:2017-11-16
use flag info pan 得到 this flags 中間 main
做項目中間遇到了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
Winform下去除MDI窗體邊框