| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Windows.Forms;
- namespace DRG.DRGInterfaceClient
- {
- /// <summary>系统托盘封装:最小化收起、双击还原、右键菜单。自定义绘制 DRG 圆形图标。</summary>
- internal class TrayIcon
- {
- public NotifyIcon Icon { get; private set; }
- private MainForm _form;
- public TrayIcon(MainForm form)
- {
- _form = form;
- Icon = new NotifyIcon
- {
- Icon = BuildIcon(),
- Visible = true,
- Text = "DRG 接口客户端"
- };
- var menu = new ContextMenuStrip();
- var open = new ToolStripMenuItem("打开主界面");
- open.Click += (s, e) => _form.ShowMain();
- var sync = new ToolStripMenuItem("立即执行一次");
- sync.Click += (s, e) => _ = _form.DoSyncAsync();
- var log = new ToolStripMenuItem("打开日志");
- log.Click += (s, e) => Logger.OpenLogFile();
- var exit = new ToolStripMenuItem("退出");
- exit.Click += (s, e) => _form.ExitApp();
- menu.Items.AddRange(new ToolStripItem[] { open, sync, log, exit });
- Icon.ContextMenuStrip = menu;
- Icon.DoubleClick += (s, e) => _form.ShowMain();
- }
- /// <summary>运行时绘制一个蓝色圆形 + 白色 "DRG" 文字图标(避免依赖外部 .ico 文件)。</summary>
- private static Icon BuildIcon()
- {
- try
- {
- var bmp = new Bitmap(32, 32);
- using (var g = Graphics.FromImage(bmp))
- {
- g.SmoothingMode = SmoothingMode.AntiAlias;
- g.Clear(Color.Transparent);
- using (var brush = new SolidBrush(Color.FromArgb(0x1E, 0x88, 0xE5)))
- g.FillEllipse(brush, 2, 2, 28, 28);
- using (var font = new Font("Microsoft YaHei", 11, FontStyle.Bold))
- using (var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center })
- using (var brushW = new SolidBrush(Color.White))
- g.DrawString("DRG", font, brushW, new RectangleF(0, 0, 32, 32), sf);
- }
- return System.Drawing.Icon.FromHandle(bmp.GetHicon());
- }
- catch
- {
- return SystemIcons.Application;
- }
- }
- public void ShowBalloon(string text)
- {
- try { Icon.ShowBalloonTip(3000, "DRG 接口客户端", text, ToolTipIcon.Info); }
- catch { }
- }
- public void Dispose()
- {
- Icon.Visible = false;
- Icon.Dispose();
- }
- }
- }
|