You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
7.8 KiB
C#
215 lines
7.8 KiB
C#
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;
|
|
|
|
namespace HslCommunication.BasicFramework
|
|
{
|
|
/// <summary>
|
|
/// 一个用于消息弹出显示的类
|
|
/// </summary>
|
|
public partial class FormPopup : Form
|
|
{
|
|
//用于维护所有的弹出消息窗口
|
|
private static List<FormPopup> FormsPopup = new List<FormPopup>();
|
|
/// <summary>
|
|
/// 新增一个显示的弹出窗口
|
|
/// </summary>
|
|
/// <param name="form"></param>
|
|
private static void AddNewForm(FormPopup form)
|
|
{
|
|
try
|
|
{
|
|
foreach (var m in FormsPopup)
|
|
{
|
|
m.LocationUpMove();
|
|
}
|
|
FormsPopup.Add(form);
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
Console.WriteLine( SoftBasic.GetExceptionMessage( ex ) );
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 重置所有弹出窗口的位置
|
|
/// </summary>
|
|
private static void ResetLocation()
|
|
{
|
|
try
|
|
{
|
|
for (int i = 0; i < FormsPopup.Count; i++)
|
|
{
|
|
FormsPopup[i].LocationUpMove(FormsPopup.Count - 1 - i);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine( SoftBasic.GetExceptionMessage( ex ) );
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 实例化一个窗口信息弹出的对象
|
|
/// </summary>
|
|
public FormPopup()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
/// <summary>
|
|
/// 实例化一个窗口信息弹出的对象
|
|
/// </summary>
|
|
/// <param name="infotext">需要显示的文本</param>
|
|
public FormPopup(string infotext)
|
|
{
|
|
InitializeComponent();
|
|
InfoText = infotext;
|
|
}
|
|
/// <summary>
|
|
/// 实例化一个窗口信息弹出的对象
|
|
/// </summary>
|
|
/// <param name="infotext">需要显示的文本</param>
|
|
/// <param name="infocolor">文本的颜色</param>
|
|
public FormPopup(string infotext,Color infocolor)
|
|
{
|
|
InitializeComponent();
|
|
InfoText = infotext;
|
|
InfoColor = infocolor;
|
|
}
|
|
/// <summary>
|
|
/// 实例化一个窗口信息弹出的对象
|
|
/// </summary>
|
|
/// <param name="infotext">需要显示的文本</param>
|
|
/// <param name="infocolor">文本的颜色</param>
|
|
/// <param name="existTime">指定窗口多少时间后消失,单位毫秒</param>
|
|
public FormPopup(string infotext, Color infocolor,int existTime)
|
|
{
|
|
InitializeComponent();
|
|
InfoText = infotext;
|
|
InfoColor = infocolor;
|
|
InfoExistTime = existTime;
|
|
}
|
|
|
|
private string InfoText { get; set; } = "This is a test message";
|
|
private Color InfoColor { get; set; } = Color.DimGray;
|
|
private int InfoExistTime { get; set; } = -1;
|
|
|
|
private Timer time = null;
|
|
|
|
//下面是可用的常量,按照不合的动画结果声明本身须要的
|
|
private const int AW_HOR_POSITIVE = 0x0001;//自左向右显示窗口,该标记可以在迁移转变动画和滑动动画中应用。应用AW_CENTER标记时忽视该标记
|
|
private const int AW_HOR_NEGATIVE = 0x0002;//自右向左显示窗口,该标记可以在迁移转变动画和滑动动画中应用。应用AW_CENTER标记时忽视该标记
|
|
private const int AW_VER_POSITIVE = 0x0004;//自顶向下显示窗口,该标记可以在迁移转变动画和滑动动画中应用。应用AW_CENTER标记时忽视该标记
|
|
private const int AW_VER_NEGATIVE = 0x0008;//自下向上显示窗口,该标记可以在迁移转变动画和滑动动画中应用。应用AW_CENTER标记时忽视该标记该标记
|
|
private const int AW_CENTER = 0x0010;//若应用了AW_HIDE标记,则使窗口向内重叠;不然向外扩大
|
|
private const int AW_HIDE = 0x10000;//隐蔽窗口
|
|
private const int AW_ACTIVE = 0x20000;//激活窗口,在应用了AW_HIDE标记后不要应用这个标记
|
|
private const int AW_SLIDE = 0x40000;//应用滑动类型动画结果,默认为迁移转变动画类型,当应用AW_CENTER标记时,这个标记就被忽视
|
|
private const int AW_BLEND = 0x80000;//应用淡入淡出结果
|
|
|
|
private void FormPopup_Load(object sender, EventArgs e)
|
|
{
|
|
label1.Text = InfoText;
|
|
label1.ForeColor = InfoColor;
|
|
label2.Text = StringResources.Language.Close;
|
|
|
|
AddNewForm(this);
|
|
int x = Screen.PrimaryScreen.WorkingArea.Right - this.Width;
|
|
int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
|
|
this.Location = new Point(x, y);//设置窗体在屏幕右下角显示
|
|
AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_VER_NEGATIVE);
|
|
TopMost = true;
|
|
|
|
if (InfoExistTime > 100)
|
|
{
|
|
time = new Timer( );
|
|
time.Interval = InfoExistTime;
|
|
time.Tick += delegate
|
|
{
|
|
if (IsHandleCreated)
|
|
{
|
|
time.Dispose();
|
|
AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE);
|
|
Close();
|
|
}
|
|
};
|
|
time.Start();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 窗体的位置进行向上调整
|
|
/// </summary>
|
|
public void LocationUpMove()
|
|
{
|
|
this.Location = new Point(this.Location.X, this.Location.Y - Height);
|
|
}
|
|
/// <summary>
|
|
/// 窗体的位置进行向上调整
|
|
/// </summary>
|
|
public void LocationUpMove(int index)
|
|
{
|
|
this.Location = new Point(this.Location.X,
|
|
Screen.PrimaryScreen.WorkingArea.Bottom - this.Height - index * this.Height);
|
|
}
|
|
|
|
private void FormPopup_Closing(object sender, FormClosingEventArgs e)
|
|
{
|
|
//AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE);
|
|
try
|
|
{
|
|
time.Enabled = false;
|
|
FormsPopup.Remove(this);
|
|
ResetLocation();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine( SoftBasic.GetExceptionMessage( ex ) );
|
|
}
|
|
}
|
|
|
|
|
|
[DllImport("user32")]
|
|
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
|
|
|
|
private void FormPopup_Paint(object sender, PaintEventArgs e)
|
|
{
|
|
Graphics g = e.Graphics;
|
|
//绘制标题
|
|
g.FillRectangle(Brushes.SkyBlue, new Rectangle(0, 0, Width - 1, 30));
|
|
StringFormat sf = new StringFormat()
|
|
{
|
|
Alignment = StringAlignment.Near,
|
|
LineAlignment = StringAlignment.Center,
|
|
};
|
|
g.DrawString(StringResources.Language.MessageTip, label2.Font, Brushes.DimGray, new Rectangle(5, 0, Width - 1, 30), sf);
|
|
|
|
|
|
g.DrawRectangle(Pens.DimGray, 0, 0, Width - 1, Height - 1);
|
|
}
|
|
|
|
private void label2_Click(object sender, EventArgs e)
|
|
{
|
|
//关闭
|
|
Close();
|
|
}
|
|
|
|
private void label2_MouseEnter(object sender, EventArgs e)
|
|
{
|
|
//label2.BackColor = Color.Tomato;
|
|
SoftAnimation.BeginBackcolorAnimation(label2, Color.Tomato, 100);
|
|
}
|
|
|
|
private void label2_MouseLeave(object sender, EventArgs e)
|
|
{
|
|
//label2.BackColor = Color.MistyRose;
|
|
SoftAnimation.BeginBackcolorAnimation(label2, Color.MistyRose, 100);
|
|
}
|
|
}
|
|
}
|