static void SetRegion(IntPtr hwnd, int width, int height, bool force)
{
if (Dwmapi.IsCompositionEnabled)
{
//clear
if (force)
{
User32.SetWindowRgn(hwnd, IntPtr.Zero, User32.IsWindowVisible(hwnd));
}
}
else
{
var wpl = default(WINDOWPLACEMENT);
wpl.length = (uint)Marshal.SizeOf(typeof(WINDOWPLACEMENT));
if (User32.GetWindowPlacement(hwnd, ref wpl))
{
if (wpl.showCmd == ShowWindowOption.SW_MAXIMIZE)
{
//clear
User32.SetWindowRgn(hwnd, IntPtr.Zero, User32.IsWindowVisible(hwnd));
}
else
{
// always rectangle to prevent rounded corners for some themes
IntPtr rgn = IntPtr.Zero;
try
{
if (width == 0 || height == 0)
{
RECT r = default(RECT);
User32.GetWindowRect(hwnd, ref r);
width = r.Width;
height = r.Height;
}
rgn = Gdi32.CreateRectRgn(0, 0, width, height);
User32.SetWindowRgn(hwnd, rgn, User32.IsWindowVisible(hwnd));
}
finally
{
if (rgn != IntPtr.Zero)
{
Gdi32.DeleteObject(rgn);
}
}
}
}
}
}