C# 写托盘程序 笔记

1、在窗体中添加NotifyIcon控件

2、在form类代码中添加函数控制窗体的显示和隐藏:

private void ShowMainForm()
        {
            this.Visible = true;                            // 窗体可见
            this.WindowState = FormWindowState.Normal;      // 窗体状态为正常
            Saber.Visible = true;                  // 托盘图标可见
            this.ShowInTaskbar = true;                      // 在任务栏显示窗体
        }
        // 隐藏窗体和任务栏图标
        private void HideMainForm()
        {
            this.WindowState = FormWindowState.Minimized;   // 最小化时隐藏窗体
            this.Visible = false;                           // 窗体不可见
            this.Saber.Visible = true;             // 图标在任务栏区域可见
            this.ShowInTaskbar = false;                     // 不在在任务栏显示窗体
        }

3、为NotifyIcon控件添加一个MouseClick的事件,实现点击托盘图标,显示窗体的功能,代码如下:

        private void Saber_MouseClick(object sender, MouseEventArgs e)
        {
            // 判断是否单击鼠标左键
            if (e.Button == MouseButtons.Left)
            {
                // 切换显示状态
                if (this.WindowState == FormWindowState.Minimized)
                {
                    ShowMainForm();
                }
                else
                {
                    HideMainForm();
                }
            }
        }
4、为窗体添加SizeChanged的事件,实现点击最小化按钮就最小化到托盘的功能,代码如下:

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                HideMainForm();
            }

        }  
经过以上4步,一个简单的托盘窗体程序就完成了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Windows API 中的 Shell_NotifyIcon 函数来给托盘程序发送消息。 首先需要定义一个 NOTIFYICONDATA 的结构体,用于传递托盘图标的信息。示例代码如下: ``` [StructLayout(LayoutKind.Sequential)] public struct NOTIFYICONDATA { public int cbSize; public IntPtr hWnd; public int uID; public int uFlags; public int uCallbackMessage; public IntPtr hIcon; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string szTip; } ``` 其中,cbSize 表示结构体的大小;hWnd 表示托盘程序的窗口句柄;uID 表示托盘图标的 ID;uFlags 表示托盘图标的属性;uCallbackMessage 表示托盘程序接收消息的消息 ID;hIcon 表示托盘图标的句柄;szTip 表示鼠标悬停在托盘图标上时显示的提示文本。 接下来,可以使用 Shell_NotifyIcon 函数来发送消息。示例代码如下: ``` [DllImport("shell32.dll", CharSet = CharSet.Auto)] public static extern bool Shell_NotifyIcon(int dwMessage, ref NOTIFYICONDATA pnid); public const int NIM_ADD = 0x00000000; public const int NIM_MODIFY = 0x00000001; public const int NIM_DELETE = 0x00000002; public const int WM_USER = 0x0400; public const int WM_APP = 0x8000; public void SendMessageToTray(int uID, int uMsg) { NOTIFYICONDATA nid = new NOTIFYICONDATA(); nid.cbSize = Marshal.SizeOf(nid); nid.hWnd = this.Handle; nid.uID = uID; nid.uFlags = 0; nid.uCallbackMessage = WM_USER + uMsg; Shell_NotifyIcon(NIM_MODIFY, ref nid); } ``` 其中,dwMessage 参数表示要执行的操作,可以是 NIM_ADD(添加托盘图标)、NIM_MODIFY(修改托盘图标)或 NIM_DELETE(删除托盘图标);pnid 参数表示托盘图标的信息。在这个示例代码中,SendMessageToTray 方法用于向托盘程序发送消息,uID 参数表示托盘图标的 ID,uMsg 参数表示要发送的消息 ID。 注意,在使用 Shell_NotifyIcon 函数时,必须先将 NOTIFYICONDATA 结构体的 cbSize 字段设置为结构体的大小,以便系统识别结构体的大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值