#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="argColor"></param> /// <param name="argTitleHeight"></param> /// <param name="argBorder"></param> public void PaintWall(Color argColor, int argTitleHeight, bool argBorder = true) { var vbitmap = new Bitmap(Width, Height); var vgraphic = Graphics.FromImage(vbitmap); var vbrush = new SolidBrush(argColor); var vpen = new Pen(argColor); vgraphic.FillRectangle(vbrush, 0, 0, Width, argTitleHeight); if (argBorder) vgraphic.DrawRectangle(vpen, 0, 0, Width - 1, Height - 1); vpen.Dispose(); vbrush.Dispose(); vgraphic.Dispose(); if (BackgroundImage != null) BackgroundImage.Dispose(); BackgroundImage = vbitmap; } #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