using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Security.Permissions; namespace ryControls { /// /// 窗体皮肤 /// [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [System.Runtime.InteropServices.ComVisibleAttribute(true)] public partial class Formbase : Form { string PicFolder = "ryControls.Controls.FormImages."; /// /// 窗体皮肤 /// public Formbase() { SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲 title = base.Text; InitializeComponent(); SetWinTopIcons(); try { if (this.Owner != null) { if (this.Owner.TopMost) { this.TopMost = true; } if (UseParentIcon) { this.Icon = this.Owner.Icon; } } } catch { } } string title = ""; /// /// 标题属性 /// [Browsable(true)] new public string Text { get { return title; } set { base.Text = value; title = value; s_lblText.Text = value; } } bool _UseParentIcon = false; /// /// 是否使用父窗口的图标 /// [Description("是否使用父窗口的图标")] public bool UseParentIcon { get { return _UseParentIcon; } set { _UseParentIcon = value; } } /// /// 点击最小化按钮是最小化还是隐藏 /// [Description("点击最小化按钮是最小化还是隐藏")] public bool MinButtonHideAction { get; set; } /// /// 最大化按钮 /// new public bool MaximizeBox { get { return base.MaximizeBox; } set { base.MaximizeBox = value; SetWinTopIcons(); } } /// /// 最小化按钮 /// new public bool MinimizeBox { get { return base.MinimizeBox; } set { base.MinimizeBox = value; SetWinTopIcons(); } } bool closeBox = true; /// /// 标题栏关闭按钮是否显示 /// [Description("标题栏关闭按钮是否显示")] public bool CloseBox { get { return closeBox; } set { closeBox = value; SetWinTopIcons(); } } bool showBackTip = true; /// /// 当窗口位于后台时,是否标注显示。 /// [Description("当窗口位于后台时,是否标注显示。")] public bool ShowBackTip { get { return showBackTip; } set { showBackTip = value; if (!value) { s_lblText.Text = title; } } } /// /// /// new public FormWindowState WindowState { get { return base.WindowState; } set { if (value == FormWindowState.Maximized) { base.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); } base.WindowState = value; } } private Color m_FormTitleColor = Color.White; /// /// 标题栏字体颜色 /// [Description("标题栏字体颜色。")] public Color FormTitleColor { get { return m_FormTitleColor; } set { m_FormTitleColor = value; s_lblText.BackColor = value; } } private Color m_FormTitleLeaveColor = Color.Gray; /// /// 标题栏不处于活动状态时的字体颜色 /// [Description("标题栏不处于活动状态时的字体颜色。")] public Color FormTitleLeaveColor { get { return m_FormTitleLeaveColor; } set { m_FormTitleLeaveColor = value; } } private Color m_FormTitleBackColor = Color.FromArgb(81, 169, 251); /// /// 标题栏背景颜色 /// [Description("标题栏背景颜色。")] public Color FormTitleBackColor { get { return m_FormTitleBackColor; } set { m_FormTitleBackColor = value; s_pnlWinTop.BackColor = value; } } private Color m_FormTitleLeaveBackColor = Color.FromArgb(235, 238, 242); /// /// 标题栏不处于活动状态时的背景颜色 /// [Description("标题栏不处于活动状态时的背景颜色。")] public Color FormTitleLeaveBackColor { get { return m_FormTitleLeaveBackColor; } set { m_FormTitleLeaveBackColor = value; } } /// /// 是否允许拖拉窗体边缘来改变窗体大小 /// [Description("是否允许拖拉窗体边缘来改变窗体大小。")] public bool CanChangeSize { get { return canChangeSize; } set { canChangeSize = value; } } private bool isMouseDown = false; private Point FormLocation; //form的location private Point mouseOffset; //鼠标的按下位置 private bool canChangeSize = false; private void PnlWinTop_MouseMove(object sender, MouseEventArgs e) { try { int _x = 0; int _y = 0; if (isMouseDown) { Point pt = Control.MousePosition; _x = mouseOffset.X - pt.X; _y = mouseOffset.Y - pt.Y; this.Location = new Point(FormLocation.X - _x, FormLocation.Y - _y); } } catch (Exception) { } } private void PnlWinTop_MouseUp(object sender, MouseEventArgs e) { isMouseDown = false; } private void PnlWinTop_MouseDown(object sender, MouseEventArgs e) { try { if (e.Button == MouseButtons.Left) { isMouseDown = true; FormLocation = this.Location; mouseOffset = Control.MousePosition; } } catch (Exception) { } } private void SetWinTopIcons() { s_pnMax.Visible = MaximizeBox; s_pnMini.Visible = MinimizeBox; s_pnClose.Visible = CloseBox; //if (MaximizeBox) //{ // pnMax.Left = pnClose.Left - pnMax.Width; // pnMax.Visible = true; // pnMini.Left = pnMax.Left - pnMini.Width; // if (MinimizeBox) // { // pnMini.Visible = true; // } // else // { // pnMini.Visible = false; // } //} //else //{ // pnMax.Visible = false; // pnMini.Left = pnClose.Left - pnMini.Width; // if (MinimizeBox) // { // pnMini.Visible = true; // } // else // { // pnMini.Visible = false; // } //} } private void Btnmin_MouseEnter(object sender, EventArgs e) { s_btnmin.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_mini_Hover.png"); } private void Btnmin_MouseLeave(object sender, EventArgs e) { s_btnmin.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_mini.png"); } private void BtnClose_Click(object sender, EventArgs e) { this.Close(); } #region 控制改变窗体大小 const int WM_NCHITTEST = 0x0084; const int HTLEFT = 10; //左边界 const int HTRIGHT = 11; //右边界 const int HTTOP = 12; //上边界 const int HTTOPLEFT = 13; //左上角 const int HTTOPRIGHT = 14; //右上角 const int HTBOTTOM = 15; //下边界 const int HTBOTTOMLEFT = 0x10; //左下角 const int HTBOTTOMRIGHT = 17; //右下角 /// /// /// /// protected override void WndProc(ref Message m) { try { base.WndProc(ref m); } catch { } switch (m.Msg) { case WM_NCHITTEST: { Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF); vPoint = PointToClient(vPoint); //判断:仅当当前窗体状态不是最大化时,相关鼠标事件生效 if (this.WindowState != FormWindowState.Maximized && (CanChangeSize)) { #region 调整窗体 if (vPoint.X <= 5) { if (vPoint.Y <= 5) { m.Result = (IntPtr)HTTOPLEFT; } else if (vPoint.Y >= ClientSize.Height - 5) { m.Result = (IntPtr)HTBOTTOMLEFT; } else { m.Result = (IntPtr)HTLEFT; } } else if (vPoint.X >= ClientSize.Width - 5) { if (vPoint.Y <= 5) { m.Result = (IntPtr)HTTOPRIGHT; } else if (vPoint.Y >= ClientSize.Height - 5) { m.Result = (IntPtr)HTBOTTOMRIGHT; } else { m.Result = (IntPtr)HTRIGHT; } } else if (vPoint.Y <= 5) { m.Result = (IntPtr)HTTOP; } else if (vPoint.Y >= ClientSize.Height - 5) { m.Result = (IntPtr)HTBOTTOM; } #endregion } break; } } } #endregion private void BtnMax_Click(object sender, EventArgs e) { if (!MaximizeBox) { return; } if (WindowState != FormWindowState.Maximized) { this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); this.WindowState = FormWindowState.Maximized; } else { this.WindowState = FormWindowState.Normal; } } Point init_Position = new Point(); private void Btnmin_Click(object sender, EventArgs e) { if (!MinimizeBox) { return; } init_Size = new Size(Width, Height); if (MinButtonHideAction) { this.Hide(); } else { this.WindowState = FormWindowState.Minimized; } } private Size init_Size = new Size(); private void Formbase_Load(object sender, EventArgs e) { s_lblText.ForeColor = m_FormTitleColor; s_btnMax.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_max.png"); s_btnmin.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_mini.png"); s_btnClose.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_close.png"); //init_Size = new Size(Width, Height); //init_Position = new Point(Left,Top); if (this.Site != null && this.Site.DesignMode) { } else { MinimumSize = new Size(Width, Height); } if (this.Owner != null) { if (this.Owner.TopMost) { this.TopMost = true; } if (UseParentIcon) { this.Icon = this.Owner.Icon; } } } /// /// 画边框 /// /// protected override void OnPaintBackground(PaintEventArgs e) { base.OnPaintBackground(e); try { ControlPaint.DrawBorder(e.Graphics, new Rectangle(0, 0, this.Width, this.Height), SkinHelp.DefalutBorderColor, ButtonBorderStyle.Solid); } catch { } } private void PnlWinTop_DoubleClick(object sender, EventArgs e) { if (this.WindowState != FormWindowState.Maximized && MaximizeBox) { this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); this.WindowState = FormWindowState.Maximized; } else { this.WindowState = FormWindowState.Normal; } } private void PnMini_Paint(object sender, PaintEventArgs e) { } private void BtnMax_MouseLeave(object sender, EventArgs e) { s_btnMax.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_max.png"); } private void BtnMax_MouseEnter(object sender, EventArgs e) { s_btnMax.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_max_Hover.png"); } private void BtnClose_MouseLeave(object sender, EventArgs e) { s_btnClose.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_close.png"); } private void BtnClose_MouseEnter(object sender, EventArgs e) { s_btnClose.BackgroundImage = ButtonImages.ImageObject.GetResBitmap(PicFolder + "btn_close_Hover.png"); } private void Formbase_Leave(object sender, EventArgs e) { } private void Formbase_Deactivate(object sender, EventArgs e) { if (Width > 100 && Height > 100) init_Size = new Size(Width, Height); if (Left > 0 && Top > 0) init_Position = new Point(Left, Top); s_pnlWinTop.BackColor = m_FormTitleLeaveBackColor; s_lblText.ForeColor = m_FormTitleLeaveColor; if (ShowBackTip) { s_lblText.Text = title + " <处于后台>"; } } private void Formbase_Activated(object sender, EventArgs e) { s_pnlWinTop.BackColor = m_FormTitleBackColor; s_lblText.ForeColor = m_FormTitleColor; s_lblText.Text = title; Form a = this; if (Width < 10) { Width = init_Size.Width; } if (Height < 10) { Height = init_Size.Height; } if (Left < 0) { Left = init_Position.X; } if (Top < 0) { Top = init_Position.Y; } } private void Formbase_Shown(object sender, EventArgs e) { try { if (this.Owner != null) { if (this.Owner.TopMost) { this.TopMost = true; } } } catch { } } private void Formbase_ResizeEnd(object sender, EventArgs e) { } private void Formbase_Resize(object sender, EventArgs e) { try { if (this.WindowState == FormWindowState.Minimized) { for (int i = 0; i < this.OwnedForms.Length; i++) { Form form = this.OwnedForms[i]; form.WindowState = FormWindowState.Normal; form.Visible = true; } } } catch { } } private void Formbase_VisibleChanged(object sender, EventArgs e) { } private void Formbase_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { this.Close(); } } } }