#if NETFX || NETCORE using Apewer.Internals.Interop; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace Apewer.Surface { /// <summary> /// /// </summary> public class BlockForm : BaseForm { #region this private bool _haveshadow = false; /// <summary></summary> public BlockForm() { Optimize(); } /// <summary>包含窗体阴影。</summary> public bool HaveShadow { get { return _haveshadow; } set { _haveshadow = value; if (value) { if (_shadow != null) HideShadow(); } else { if (_shadow == null) ShowShadow(); } } } #endregion #region override /// <summary>显示或隐藏时的动画和阴影。</summary> protected override void OnVisibleChanged(EventArgs e) { if (Visible) { if (!DesignMode) User32.AnimateWindow(this.Handle, 150, Constant.AW_BLEND | Constant.AW_ACTIVATE); if (!DesignMode && _shadow == null) ShowShadow(); base.OnVisibleChanged(e); } else { base.OnVisibleChanged(e); User32.AnimateWindow(this.Handle, 150, Constant.AW_BLEND | Constant.AW_HIDE); } } /// <summary>关闭窗体时同时关闭阴影。</summary> protected override void OnClosing(CancelEventArgs e) { HideShadow(); base.OnClosing(e); User32.AnimateWindow(this.Handle, 150, Constant.AW_BLEND | Constant.AW_HIDE); } #endregion #region surface /// <summary> /// /// </summary> /// <param name="color"></param> /// <param name="titleHeight"></param> /// <param name="border"></param> public void PaintWall(Color color, int titleHeight, bool border = true) { var bitmap = new Bitmap(Width, Height); var graphic = Graphics.FromImage(bitmap); var brush = new SolidBrush(color); var pen = new Pen(color); graphic.FillRectangle(brush, 0, 0, Width, titleHeight); if (border) graphic.DrawRectangle(pen, 0, 0, Width - 1, Height - 1); pen.Dispose(); brush.Dispose(); graphic.Dispose(); if (BackgroundImage != null) BackgroundImage.Dispose(); BackgroundImage = bitmap; } #endregion #region shadow /// <summary>窗体阴影边框。</summary> private BlockShadow _shadow; private void ShowShadow() { if (!HaveShadow) return; _shadow = new BlockShadow(this); _shadow.Show(this); } private void HideShadow() { if (_shadow != null) { _shadow.Close(); _shadow.Dispose(); _shadow = null; } } /// <summary>阴影已溢出屏幕。</summary> public bool ShadowOverflow { get { int vwidth = Width + 200; int vheight = Height + 200; if ((vwidth > Screen.PrimaryScreen.Bounds.Width) || (vheight > Screen.PrimaryScreen.Bounds.Height)) { return true; } else return false; } } #endregion } } #endif