using AutoUpdaterDotNET; using DeviceRepair.Models; using DeviceRepairAndOptimization; using DeviceRepairAndOptimization.Common; using System; using System.Drawing; using System.Drawing.Drawing2D; using System.IO; using System.Reflection; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace DeviceRepairAndOptimization { /// /// 用户登录窗体 /// public partial class frm_Login : Form { #region ctor public frm_Login() { InitializeComponent(); InstanceControl(); // 设置窗体双缓冲,可以提高绘制效率 this.DoubleBuffered = true; // 设置圆角 SetRoundRegion(this, 6); } #endregion #region method /// /// 设置窗体的圆角区域 /// /// /// private void SetRoundRegion(Form form, int radius) { IntPtr handle = CreateRoundRectRgn(0, 0, form.Width, form.Height, radius * 2, radius * 2); if (handle != IntPtr.Zero) { Region region = Region.FromHrgn(handle); form.Region = region; DeleteObject(handle); } } /// /// 控件初始化 - 部分控件居中样式处理 /// public void InstanceControl() { SelectButton(btn_Close); } #endregion #region Win32 [DllImport("Gdi32.dll", EntryPoint = "DeleteObject")] private static extern bool DeleteObject(IntPtr hObject); private const int WM_SysCommand = 0x0112; private const int OneMsgNum = 0xf017; [DllImport("user32")] private static extern bool ReleaseCapture(); [DllImport("user32")] private static extern bool PostMessage(int hWnd, int Mwg, int wParam, int lParam); [DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")] private static extern IntPtr CreateRoundRectRgn(int left, int top, int right, int bottom, int width, int height); #endregion #region event /// /// 鼠标拖动 /// /// /// private void pnl_Caption_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { ReleaseCapture(); PostMessage((int)this.Handle, WM_SysCommand, OneMsgNum, 0); } } /// /// 登录按钮点击事件 /// /// /// private void btn_Login_Click(object sender, EventArgs e) { EnableOrDisableControl(false); splashScreenManager1.ShowWaitForm(); try { if (string.IsNullOrEmpty(txt_UserCode.Text.Trim())) throw new Exception("您输入的账户错误,请重试。"); if (string.IsNullOrEmpty(txt_UserPass.Text.Trim())) throw new Exception("您输入的密码错误,请重试。"); var responseData = Biz.UserManager.Instance.GetDataByCodeAndPwd(new UserInfoModel { LoginCode = txt_UserCode.Text.Trim(), PassWord = DeviceRepair.Utils.Security.EncryptionHelper.EncryptByMD5(txt_UserPass.Text) }); if (responseData.Code != 1) throw new Exception(responseData.Message); UserInfoModel us = responseData.ToDeserializeObject(); if (us != null) { if (!us.Status) throw new Exception($"用户被锁定,无法登录!"); if (!string.IsNullOrEmpty(responseData.Token)) { splashScreenManager1.TryCloseWait(); GlobalInfo.CurrentUser = us; GlobalInfo.token = responseData.Token; this.DialogResult = DialogResult.OK; this.Close(); return; } } EnableOrDisableControl(true); splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(responseData.Message); } catch (Exception ex) { EnableOrDisableControl(true); splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(ex.Message); } } /// /// 启用或禁用窗体控件 /// /// void EnableOrDisableControl(bool sw) { btn_Login.Enabled = sw; txt_UserCode.Enabled = sw; txt_UserPass.Enabled = sw; } /// /// 退出按钮点击事件 /// /// /// private void btn_Close_Click(object sender, EventArgs e) => this.Close(); /// /// 关闭按钮 鼠标获取焦点事件 -- 做获取焦点样式处理 /// /// /// private void btn_Close_MouseMove(object sender, MouseEventArgs e) { Button btn = sender as Button; btn.BackColor = Color.Red; btn.ForeColor = Color.White; } /// /// 关闭按钮 鼠标失去焦点事件 -- 做失去焦点样式处理 /// /// /// private void btn_Close_MouseLeave(object sender, EventArgs e) { Button btn = sender as Button; btn.BackColor = Color.White; btn.ForeColor = Color.Black; } /// /// 取消获得焦点 /// /// public static void SelectButton(Button button) { MethodInfo methodinfo = button.GetType().GetMethod("SetStyle", BindingFlags.NonPublic | BindingFlags.Instance); methodinfo.Invoke(button, BindingFlags.NonPublic, null, new object[] { ControlStyles.Selectable, false }, null); } /// /// 窗体自绘 /// /// /// private void frm_Login_Paint(object sender, PaintEventArgs e) { Rectangle tang = this.ClientRectangle; //获取窗口矩形 为了下面得到窗口的宽高 Graphics g3 = e.Graphics; //新建一个画布 Color c3 = Color.FromArgb(183, 183, 183); //声明一个 颜色 Pen p3 = new Pen(c3); //新建一支画笔 g3.SmoothingMode = SmoothingMode.HighQuality; //抗锯齿 使得线条变柔顺 在画斜线或者曲线的时候使用 g3.InterpolationMode = InterpolationMode.HighQualityBicubic; //使得画出来的效果高质量 g3.CompositingQuality = CompositingQuality.HighQuality; //高质量画图 g3.DrawLine(p3, 0, 0, 0, tang.Height - 1); //在(0,0)和(tang.Width - 1, 0)这两点间画一条直线 g3.DrawLine(p3, 0, tang.Height - 1, tang.Width - 1, tang.Height - 1); //注意必须减1 不然显示不出来 因为 如果假设窗口的高度是3像素 我们知道(0,0)位置代表 窗口最左上角的像素点 那么最左下角的像素点应该是(0,2) 而不是(0,3) 因为0,1,2 已经三个像素点了 g3.DrawLine(p3, tang.Width - 1, tang.Height - 1, tang.Width - 1, 0); g3.DrawLine(p3, tang.Width - 1, 0, 0, 0); } #endregion private void frm_Login_Load(object sender, EventArgs e) { AutoUpdate(); } public void AutoUpdate() { AutoUpdater.AppTitle = "Device Repair And Optimization"; var vUpdateDir = Path.Combine(Application.StartupPath, "Update"); if (!Directory.Exists(vUpdateDir)) { Directory.CreateDirectory(vUpdateDir); } // 指定下载文件的存储目录 AutoUpdater.DownloadPath = vUpdateDir; AutoUpdater.UpdateFormSize = new Size(800, 600); AutoUpdater.ApplicationExitEvent += AutoUpdater_ApplicationExitEvent; AutoUpdater.Synchronous = true; AutoUpdater.ShowSkipButton = false; AutoUpdater.ShowRemindLaterButton = false; AutoUpdater.Start($"http://{DeviceRepair.Utils.Config.Configurations.Properties.ServiceIP}/{DeviceRepair.Utils.Config.Configurations.Properties.ServiceName}/Update/DOAutoUpdater.xml"); } private void AutoUpdater_ApplicationExitEvent() { Text = @"Closing application..."; Thread.Sleep(5000); Application.Exit(); } } }