C#下实现动态系统托盘图标
Visual C#是微軟公司推出的下一代程序開發(fā)語(yǔ)言,是微軟.Net框架中的的一個(gè)重要組成部分。微軟的.Net平臺(tái)堪稱為新一代的互聯(lián)網(wǎng)平臺(tái)。對(duì)于技術(shù)開發(fā)人員來(lái)說(shuō),.Net平臺(tái)的兩大特性是非常卓越的,首先是其所提供的公共語(yǔ)言運(yùn)行時(shí),也就是公用語(yǔ)言運(yùn)行平臺(tái),另一方面就是其龐大而全面的統(tǒng)一編程類。Visual C#就是通過(guò)調(diào)用這些類、對(duì)象來(lái)實(shí)現(xiàn)許多比較強(qiáng)大的功能。?
本文通過(guò)向大家介紹一個(gè).Net平臺(tái)上用C#寫的可以停放在任務(wù)欄上的圖標(biāo)程序(類似于Flashget、OICQ那種系統(tǒng)托盤圖標(biāo))來(lái)和大家一起體驗(yàn)一下用C#編程的樂趣。?
一、概述:?
我這里所指的圖標(biāo)程序是類似于在Windows中經(jīng)常接觸的停放在任務(wù)欄上,在后臺(tái)運(yùn)行的病毒監(jiān)視、媒體播放等程序。它們一般都具有單擊顯示或隱藏主界面,擊右鍵彈出菜單,當(dāng)鼠標(biāo)停在圖標(biāo)上時(shí)顯示提示信息的功能。?
程序主要用到了一下幾個(gè)類:?
System.Windows.Fomrs.NotifyIcon類
System.Windows.Forms.ContextMenu類
System.Windows.Forms.MenuItem類
System.Windows.Forms.Label類
System.Windows.Forms.Timer類?
二、程序設(shè)計(jì)和運(yùn)行的環(huán)境:?
(1)微軟公司視窗2000服務(wù)器版或視窗XP版?
(2).Net FrameWrok SDK Beta 2版?
三、具體實(shí)現(xiàn)步驟:?
(1).在Visual Studio下新建一個(gè)C#的工程,不妨命名為AnimateSystemTray。圖示如下:?
(2).現(xiàn)在我們來(lái)設(shè)計(jì)程序的主界面:?
先將窗體的Text屬性設(shè)置為"動(dòng)畫系統(tǒng)圖標(biāo)示例",MaximiseBox、MinimiseBox、ShowInTaskbar屬性均設(shè)置為False。?
再往窗體上添加Label控件、NotifyIcon控件、ContextMenu控件、Timer控件各一個(gè)。?
將Label控件的Text屬性設(shè)置為"請(qǐng)右擊系統(tǒng)托盤圖標(biāo)";將NotifyIcon控件的Icon屬性設(shè)置為一個(gè)圖標(biāo)文件: ,Text屬性設(shè)置為"這是個(gè)示例程序!",ContextMenu屬性設(shè)置為"contextMenu1";接下來(lái)開始編輯ContextMenu控件,圖示如下:?
最后還要在導(dǎo)入兩個(gè)圖標(biāo) (Icon1.ico), (Icon2.ico)文件到該項(xiàng)目。?
(3).現(xiàn)在我們開始編寫代碼部分:?
首先在我們的類中添加以下數(shù)據(jù)成員:?
private Icon m_Icon1;
private Icon m_Icon2;
private bool m_bFlag;
private bool m_bShowWnd;?
修改Form1()函數(shù)為:
2 {
3 //
4 // Required for Windows Form Designer support
5 //
6 InitializeComponent();
7 //
8 // TODO: Add any constructor code after InitializeComponent call
9 //
10 m_bFlag=true;
11 m_bShowWnd=true;
12 try
13 {
14 m_Icon1 = new Icon("Icon1.ico");//導(dǎo)入圖標(biāo)文件
15 m_Icon2 = new Icon("Icon2.ico");
16 }
17 catch ( Exception e )
18 {
19 MessageBox.Show("Error " + e.Message,"Animate Tray - Error");
20 menuItem2.Enabled = false;
21 menuItem3.Enabled = false;
22 }
23 }
24 添加menuItem1、menuItem2、menuItem3、m_trayIcon的Click事件,消息處理函數(shù)如下:
25 private void menuItem1_Click(object sender, System.EventArgs e)
26 {
27 timer1.Start();//打開計(jì)時(shí)器
28 }
29 private void menuItem2_Click(object sender, System.EventArgs e)
30 {
31 timer1.Stop();//停止計(jì)時(shí)器
32 }
33 private void menuItem3_Click(object sender, System.EventArgs e)
34 {
35 Application.Exit();//退出應(yīng)用程序
36 }
37 private void m_trayIcon_Click(object sender, System.EventArgs e)
38 {
39 if(m_bShowWnd == true)//隱藏主界面
40 {
41 this.Visible = false;
42 m_bShowWnd = false;
43 }
44 else//顯示主界面
45 {
46 this.Visible = true;
47 m_bShowWnd = true;
48 }
49 }
50
51 最后還要添加timer1的Tick()函數(shù):
52 private void timer1_Tick(object sender, System.EventArgs e)
53 {
54 if ( m_Icon1 != null && m_Icon2 != null ) //如果兩個(gè)圖標(biāo)文件都被正確載入
55 {
56 //只要timer1被啟動(dòng),則在兩個(gè)圖標(biāo)之間不斷進(jìn)行選擇變換,實(shí)現(xiàn)動(dòng)畫效果
57 if ( m_bFlag == true )
58 {
59 m_trayIcon.Icon = m_Icon2;
60 m_bFlag = false;
61 }
62 else
63 {
64 m_trayIcon.Icon = m_Icon1;
65 m_bFlag = true;
66 }
67 }
68 }
好了,按Ctrl+F5試試效果吧!?
運(yùn)行程序,將顯示一個(gè)主窗口,此時(shí)還可以看到在任務(wù)欄上面多了一個(gè)圖標(biāo)。當(dāng)鼠標(biāo)移到其上停留一下時(shí),將顯示一個(gè)簡(jiǎn)單的提示信息,點(diǎn)擊該圖標(biāo)則將隱藏主窗口,單擊右鍵,出來(lái)一個(gè)菜單,選"動(dòng)畫圖標(biāo)開始"和"動(dòng)畫圖標(biāo)結(jié)束"可以控制圖標(biāo)狀態(tài)。?
四.總結(jié):?
做完這個(gè)程序,我們不難發(fā)現(xiàn)用C#做一些運(yùn)用程序效果是非常方便的。以前我在SDK、MFC下,用到了Shell_NotifyIcon()、TrackPopMenu()以及DestroyMenu(),還要自己添加消息處理函數(shù),工作量是非常大的。現(xiàn)在微軟為我們做好了這些工作,是不是很方便?快快加入C#的行列吧。
轉(zhuǎn)載于:https://www.cnblogs.com/carekee/articles/4551722.html
總結(jié)
以上是生活随笔為你收集整理的C#下实现动态系统托盘图标的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C#】读书笔记
- 下一篇: 【转】Compile、Make和Buil