c# MDI容器,与最大化的子窗体之间的3d边框效果,怎么去掉

ijunxiong 2016-07-05 03:20:26


参照 www.myexception.cn/c-sharp/1683098.html 的方法,用控件的Controls来包含,
但 这也会产生其他问题,
1。如窗体切换,按键ctrl+tab,
2。如主窗体的标题,(一般mdi是 主窗体text - [子窗体text])
3。最大化窗体,虽然都设置了dock,还是有尺寸不发生改变的问题
4。工具栏,菜单没办法合并的问题,,,


综上,是否还有别的办法????
比如重绘之类的
(重绘的不是很清楚能不能实现,我只测了OnPaint,好像不行,进行重绘,在非mdi容器有效果的
,在mdi容器就不行,)

谢谢
...全文
569 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
龍过鸡年 2016-07-06
  • 打赏
  • 举报
回复
http://codego.net/366493/
ijunxiong 2016-07-06
  • 打赏
  • 举报
回复
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace MDITest { public static class MDIClientSupport { [DllImport("user32.dll")] private static extern int GetWindowLong(IntPtr hWnd, int nIndex); [DllImport("user32.dll")] private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); [DllImport("user32.dll", ExactSpelling = true)] private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); private const int GWL_EXSTYLE = -20; private const int WS_EX_CLIENTEDGE = 0x200; private const uint SWP_NOSIZE = 0x0001; private const uint SWP_NOMOVE = 0x0002; private const uint SWP_NOZORDER = 0x0004; private const uint SWP_NOREDRAW = 0x0008; private const uint SWP_NOACTIVATE = 0x0010; private const uint SWP_FRAMECHANGED = 0x0020; private const uint SWP_SHOWWINDOW = 0x0040; private const uint SWP_HIDEWINDOW = 0x0080; private const uint SWP_NOCOPYBITS = 0x0100; private const uint SWP_NOOWNERZORDER = 0x0200; private const uint SWP_NOSENDCHANGING = 0x0400; public static bool SetBevel(this Form form, bool show) { foreach (Control c in form.Controls) { MdiClient client = c as MdiClient; if (client != null) { int windowLong = GetWindowLong(c.Handle, GWL_EXSTYLE); if (show) { windowLong |= WS_EX_CLIENTEDGE; } else { windowLong &= ~WS_EX_CLIENTEDGE; } SetWindowLong(c.Handle, GWL_EXSTYLE, windowLong); // Update the non-client area. SetWindowPos(client.Handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_FRAMECHANGED); return true; } } return false; } } } 调用,form_load MDIClientSupport.SetBevel(this, false);
ijunxiong 2016-07-06
  • 打赏
  • 举报
回复
引用 5 楼 qqamoon 的回复:
http://codego.net/366493/
谢谢,你说的方法试了,可以!
ijunxiong 2016-07-06
  • 打赏
  • 举报
回复
引用 6 楼 shingoscar 的回复:
[quote=引用 4 楼 ijunxiong 的回复:] [quote=引用 1 楼 shingoscar 的回复:] 拖个panel进去,dock设置为fill即可
我有说了,用这种方法测过了, 即控件的controls包含的方法了, 和会出现的问题。。。。。(问题不少,所以才想有没有不用这种方法处理的其他方法) (控件其实就是panel容器) 另外,你3楼给的代码,的用处是??   我测了没变化[/quote] 没变化说明Load事件没注册[/quote] ,,,, 注册了,断点也进从break出来了,,, 没变化
Poopaye 2016-07-06
  • 打赏
  • 举报
回复
引用 4 楼 ijunxiong 的回复:
[quote=引用 1 楼 shingoscar 的回复:] 拖个panel进去,dock设置为fill即可
我有说了,用这种方法测过了, 即控件的controls包含的方法了, 和会出现的问题。。。。。(问题不少,所以才想有没有不用这种方法处理的其他方法) (控件其实就是panel容器) 另外,你3楼给的代码,的用处是??   我测了没变化[/quote] 没变化说明Load事件没注册
ijunxiong 2016-07-05
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
拖个panel进去,dock设置为fill即可
我有说了,用这种方法测过了, 即控件的controls包含的方法了, 和会出现的问题。。。。。(问题不少,所以才想有没有不用这种方法处理的其他方法) (控件其实就是panel容器) 另外,你3楼给的代码,的用处是??   我测了没变化
tcmakebest 2016-07-05
  • 打赏
  • 举报
回复
一定是新建的时候操作不正确, 正常情况下边框比这个窄
Poopaye 2016-07-05
  • 打赏
  • 举报
回复
换一个方法
		[DllImport("user32.dll")]
		static extern long GetWindowLong(IntPtr hWnd, int nIndex);

		[DllImport("user32.dll")]
		static extern long SetWindowLong(IntPtr hWnd, int nIndex, long value);

		private void Form1_Load(object sender, EventArgs e)
		{
			foreach (Control c in this.Controls)
			{
				if (c is MdiClient)
				{
					IntPtr h = c.Handle;
					SetWindowLong(h, -16, GetWindowLong(h, -16) & ~0x00800000L);
					SetWindowLong(h, -20, GetWindowLong(h, -20) & ~0x00000200L);
					break;
				}
			}
		}
Poopaye 2016-07-05
  • 打赏
  • 举报
回复
拖个panel进去,dock设置为fill即可
内容概要:本文针对无刷直流电机驱动的电机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧