当前位置: 首页 > 编程语言 > C#

如何去除MDI父窗体的灰色背景?分享

时间:2023-04-11 11:19:02 C#

MDI父窗体灰色背景怎么去掉?我想要做的是在标记为mdi容器的表单上绘制一些玻璃。但是,无论何时设置IsMdiContainer,窗体都会将MdiClient添加到其控件列表中。此时,父窗体发生了一些变化——几乎就像深灰色面板停靠在MdiClient所在的整个窗体上一样。我接下来要做的是将MdiClient控件移开一点:foreach(varcinControls){if(cisMdiClient){varclient=(MdiClient)c;client.BackColor=Color.Red;client.Dock=DockStyle.None;client.Size=newSize(this.Width-100,this.Height);休息;这会使实际的MdiClient区域变小,这样我们就可以看到它背后的内容(托管子窗体位),显然父窗体没有绘画或其他东西。从这里查看:http://img525.imageshack.us/img525/8605/mdiglassproblem.png我现在需要以某种方式让MdiClient后面的区域(玻璃部分显示为白色的深灰色部分)消失。有任何想法吗?PS-在Vista中使用DwmExtendFrameIntoClientArea方法渲染Glass。我认为这是完美的。foreach(控制ctrlinthis.Controls){if(ctrlisMdiClient){ctrl.BackColor=Color.LightGray;我设法让它工作。我所说的那个深灰色区域是在所有内容的OnPaint方法中绘制的。显然,当MdiContainer存在时,该表已预先编程以绘制阻挡玻璃的深灰色区域。所以只需要覆盖OnPaint方法而不调用它的基类,并使用普通Paint方法中绘制玻璃的代码并将其粘贴到OnPaint方法中。protectedoverridevoidOnPaint(PaintEventArgse){//base.OnPaint(e);boolglassEnabled=IsGlassEnabled();if(glassEnabled)//如果启用则绘制玻璃{Rectanglerc=picPlaceHolder.ClientRectangle;IntPtrdestdc=e.Graphics.GetHdc();//hwnd必须是窗体句柄,不能是控件IntPtrMemdc=CreateCompatibleDC(destdc);IntPtrbitmapOld=IntPtr.Zero;BITMAPINFOdib=newBITMAPINFO();dib.bmiHeader.biHeight=-(rc.Bottom-rc.Top);dib.bmiHeader.biWidth=rc.Right-rc.Left;dib.bmiHeader.biPlanes=1;dib.bmiHeader.biSize=Marshal.SizeOf(typeof(BITMAPINFOHEADER));dib.bmiHeader.biBitCount=32;dib.bmiHeader.biCompression=BI_RGB;如果(!(SaveDC(Memdc)==0)){IntPtr位图=CreateDIBSection(Memdc,refdib,DIB_RGB_COLORS,0,IntPtr.Zero,0);如果(!(bitmap==IntPtr.Zero)){bitmapOld=SelectObject(Memdc,bitmap);BitBlt(destdc,rc.Left,rc.Top,rc.Right-rc.Left,rc.Bottom-rc.Top,Memdc,0,0,SRCCOPY);}//记得清理SelectObject(Memdc,bitmapOld);删除对象(位图);ReleaseDC(Memdc,-1);删除DC(内存);}e.Graphics.ReleaseHdc();然后确保MdiContainer不会挡住玻璃,它应该完美地绘制上面这是C#学习教程:如何删除MDI父窗体上的灰色背景?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢