TrayIcon.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.Drawing;
  2. using System.Drawing.Drawing2D;
  3. using System.Windows.Forms;
  4. namespace DRG.DRGInterfaceClient
  5. {
  6. /// <summary>系统托盘封装:最小化收起、双击还原、右键菜单。自定义绘制 DRG 圆形图标。</summary>
  7. internal class TrayIcon
  8. {
  9. public NotifyIcon Icon { get; private set; }
  10. private MainForm _form;
  11. public TrayIcon(MainForm form)
  12. {
  13. _form = form;
  14. Icon = new NotifyIcon
  15. {
  16. Icon = BuildIcon(),
  17. Visible = true,
  18. Text = "DRG 接口客户端"
  19. };
  20. var menu = new ContextMenuStrip();
  21. var open = new ToolStripMenuItem("打开主界面");
  22. open.Click += (s, e) => _form.ShowMain();
  23. var sync = new ToolStripMenuItem("立即执行一次");
  24. sync.Click += (s, e) => _ = _form.DoSyncAsync();
  25. var log = new ToolStripMenuItem("打开日志");
  26. log.Click += (s, e) => Logger.OpenLogFile();
  27. var exit = new ToolStripMenuItem("退出");
  28. exit.Click += (s, e) => _form.ExitApp();
  29. menu.Items.AddRange(new ToolStripItem[] { open, sync, log, exit });
  30. Icon.ContextMenuStrip = menu;
  31. Icon.DoubleClick += (s, e) => _form.ShowMain();
  32. }
  33. /// <summary>运行时绘制一个蓝色圆形 + 白色 "DRG" 文字图标(避免依赖外部 .ico 文件)。</summary>
  34. private static Icon BuildIcon()
  35. {
  36. try
  37. {
  38. var bmp = new Bitmap(32, 32);
  39. using (var g = Graphics.FromImage(bmp))
  40. {
  41. g.SmoothingMode = SmoothingMode.AntiAlias;
  42. g.Clear(Color.Transparent);
  43. using (var brush = new SolidBrush(Color.FromArgb(0x1E, 0x88, 0xE5)))
  44. g.FillEllipse(brush, 2, 2, 28, 28);
  45. using (var font = new Font("Microsoft YaHei", 11, FontStyle.Bold))
  46. using (var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center })
  47. using (var brushW = new SolidBrush(Color.White))
  48. g.DrawString("DRG", font, brushW, new RectangleF(0, 0, 32, 32), sf);
  49. }
  50. return System.Drawing.Icon.FromHandle(bmp.GetHicon());
  51. }
  52. catch
  53. {
  54. return SystemIcons.Application;
  55. }
  56. }
  57. public void ShowBalloon(string text)
  58. {
  59. try { Icon.ShowBalloonTip(3000, "DRG 接口客户端", text, ToolTipIcon.Info); }
  60. catch { }
  61. }
  62. public void Dispose()
  63. {
  64. Icon.Visible = false;
  65. Icon.Dispose();
  66. }
  67. }
  68. }