WinForm 无毛边异形窗体
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
namespace CCWin
{
//绘图层
partial class SkinForm : Form
{
//控件层
private SkinMain Main;
//带参构造
public SkinForm(SkinMain main)
{
InitializeComponent();
//将控制层传值过来
this.Main = main;
//减少闪烁
SetStyles();
//初始化
Init();
}
#region 初始化
private void Init()
{
//最顶层
TopMost = Main.TopMost;
//是否在任务栏显示
ShowInTaskbar = Main.SkinShowInTaskbar;
//无边框模式
FormBorderStyle = FormBorderStyle.None;
//自动拉伸背景图以适应窗口
BackgroundImageLayout = ImageLayout.Stretch;
//还原任务栏右键菜单
CommonClass.SetTaskMenu(this);
//设置绘图层显示位置
this.Location = new Point(Main.Location.X - Main.MainPosition.X, Main.Location.Y - Main.MainPosition.Y);
//设置ICO
Icon = Main.Icon;
//是否显示ICO
ShowIcon = Main.ShowIcon;
//设置大小
Size = Main.SkinSize;
//设置标题名
Text = Main.Text;
//设置背景
Bitmap bitmaps = new Bitmap(Main.SkinBack, Size);
if (Main.SkinTrankColor != Color.Transparent)
{
bitmaps.MakeTransparent(Main.SkinTrankColor);
}
BackgroundImage = bitmaps;
//控制层与绘图层合为一体
Main.TransparencyKey = Main.SkinWhetherTank ? Color.Empty : Main.BackColor;
Main.Owner = this;
//绘制层窗体移动
this.MouseDown += new MouseEventHandler(Frm_MouseDown);
this.MouseMove += new MouseEventHandler(Frm_MouseMove);
this.MouseUp += new MouseEventHandler(Frm_MouseUp);
this.LocationChanged += new EventHandler(Frm_LocationChanged);
//控制层层窗体移动
Main.MouseDown += new MouseEventHandler(Frm_MouseDown);
Main.MouseMove += new MouseEventHandler(Frm_MouseMove);
Main.MouseUp += new MouseEventHandler(Frm_MouseUp);
Main.LocationChanged += new EventHandler(Frm_LocationChanged);
}
#endregion
#region 减少闪烁
private void SetStyles()
{
SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.DoubleBuffer, true);
//强制分配样式重新应用到控件上
UpdateStyles();
base.AutoScaleMode = AutoScaleMode.None;
}
#endregion
#region 无标题栏的窗口移动
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
//窗体按下时
private void Frm_MouseDown(object sender, MouseEventArgs e)
{
if (Main.SkinMobile)
{
int xOffset;
int yOffset;
//点击窗体时,记录鼠标位置,启动移动
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X;
yOffset = -e.Y;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
}
}
//窗体移动时
private void Frm_MouseMove(object sender, MouseEventArgs e)
{
if (Main.SkinMobile)
{
//将调用此事件的窗口保存下
Form frm = (Form)sender;
//确定开启了移动模式后
if (isMouseDown)