65.9K
CodeProject 正在变化。 阅读更多。
Home

向窗体的标题栏添加“最小化到托盘”按钮

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (22投票s)

2005年4月20日

2分钟阅读

viewsIcon

273602

downloadIcon

9995

一篇关于如何向标题栏添加自定义按钮的文章。

引言

本文档简要介绍了如何在表单的标题栏中轻松实现“最小化到托盘”按钮。 此文章附带的代码仅支持默认表单,并且不支持视觉样式。 欢迎改进代码,如有任何疑问,请与我联系。 如果您修复了上述限制,并向我发送副本,以便我更新本文,我将不胜感激。

背景

我目前正在开发的项目需要在后台运行。 因此,最好的方法是将该应用程序最小化到托盘栏,这样比在任务栏中更不容易打扰。 因此,我添加了一些代码,当用户通过标题栏中的“关闭”按钮关闭程序时,程序会最小化。 这可行了一段时间,效果很好。 但这是一种不好且不友好的方法。 我想要一个像 eMule 那样的“最小化到托盘”按钮 - 在研究之后,我注意到 C# 中还没有人这样做。

使用代码

  • 步骤 1:将文件 'MinTrayBtn.cs' 添加到您的项目中,并使用 IDE 的设计器添加 NotifyIcon 组件。 为 NotifyIcon 组件设置一个图标,并将可见性设置为 false
  • 步骤 2:现在,只需在 Windows Form 类中声明一个 MinTrayBtn 变量,以便在 Form 构造函数中实例化对象。
    public class WinForm : System.Windows.Forms.Form {
    
        //... Some other code
        TyronM.MinTrayBtn mybutton;
        //... Some other code
    
        public WinForm() {
            mybutton = new TyronM.MinTrayBtn(this);
        }
    
    }
  • 步骤 3:添加一个函数来捕获 MinTrayBtnClicked 事件并注册事件处理程序。 使用 NotifyIconClick 事件,然后再次显示 Form
    public class WinForm : System.Windows.Forms.Form {
        
        //... Some other code
        TyronM.MinTrayBtn mybutton;
        //... Some other code
    
        public WinForm() {
            mybutton = new TyronM.MinTrayBtn(this);
            mybutton.MinTrayBtnClicked += 
              new TyronM.MinTrayBtnClickedEventHandler(TrayBtn_clicked);
        }
        
        private void TrayBtn_clicked(object sender, EventArgs e) {
            this.Hide();
            this.notifyIcon1.Visible = true;
        }
    
    
        private void notifyIcon1_Click(object sender, System.EventArgs e) {
            this.Show();
            this.notifyIcon1.Visible = false;
        }
        
    }

关注点

标题栏是窗口的非客户端区域的一部分,由 Windows 处理,因此很难在那里添加一个按钮。 我必须自己绘制按钮并捕获各种鼠标事件,以克隆其他按钮的行为(此按钮的行为与其他按钮完全相同,或者至少应该如此:))。

修订

  • 0.8.5

    2005 年 7 月 11 日

    • 更改:变量标题栏按钮大小(自动调整到系统指标)。
    • 修复:窗口宽度更改时的绘制问题。
  • 0.8

    2005 年 4 月 20 日

    • 文章创建。
© . All rights reserved.