How to remove gray background on MDI parent form?
I think this is perfect enough.
foreach (Control ctrl in this.Controls)
{
if (ctrl is MdiClient)
{
ctrl.BackColor = Color.LightGray;
}
}
I managed to get it working. That dark gray area I was talking about, which gets painted over everything was occuring in the OnPaint method of the form. Obviously when there is an MdiContainer present the form is preprogrammed to paint the dark gray area which was obstructing the glass.
So just override the OnPaint method without calling it's base and then take the code that was used to draw the glass in the normal Paint method and stick it in the OnPaint method.
protected override void OnPaint(PaintEventArgs e)
{
//base.OnPaint(e);
bool glassEnabled = IsGlassEnabled();
if (glassEnabled) // draw glass if enabled
{
Rectangle rc = picPlaceHolder.ClientRectangle;
IntPtr destdc = e.Graphics.GetHdc(); // hwnd must be the handle of form, not control
IntPtr Memdc = CreateCompatibleDC(destdc);
IntPtr bitmapOld = IntPtr.Zero;
BITMAPINFO dib = new BITMAPINFO();
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;
if (!(SaveDC(Memdc) == 0))
{
IntPtr bitmap = CreateDIBSection(Memdc, ref dib, DIB_RGB_COLORS, 0, IntPtr.Zero, 0);
if (!(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);
}
// remember to clean up
SelectObject(Memdc, bitmapOld);
DeleteObject(bitmap);
ReleaseDC(Memdc, -1);
DeleteDC(Memdc);
}
e.Graphics.ReleaseHdc();
}
}
Then just ensure that the MdiContainer is not in the way of the glass and it should draw perfectly.