You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
3.6 KiB
143 lines
3.6 KiB
#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
|
|
|