C#下完成動(dòng)態(tài)系統(tǒng)托盤圖標(biāo)
發(fā)表時(shí)間:2023-08-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]Visual C#是微軟公司推出的下一代程序開(kāi)發(fā)語(yǔ)言,是微軟.Net框架中的的一個(gè)重要組成部分。微軟的.Net平臺(tái)堪稱為新一代的互聯(lián)網(wǎng)平臺(tái)。對(duì)于技術(shù)開(kāi)發(fā)人員來(lái)說(shuō),.Net平臺(tái)的兩大特性是非常卓越的...
Visual C#是微軟公司推出的下一代程序開(kāi)發(fā)語(yǔ)言,是微軟.Net框架中的的一個(gè)重要組成部分。微軟的.Net平臺(tái)堪稱為新一代的互聯(lián)網(wǎng)平臺(tái)。對(duì)于技術(shù)開(kāi)發(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#編程的樂(lè)趣。
一、概述:
我這里所指的圖標(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)開(kāi)始編輯ContextMenu控件,圖示如下:
最后還要在導(dǎo)入兩個(gè)圖標(biāo) (Icon1.ico), (Icon2.ico)文件到該項(xiàng)目。
(3).現(xiàn)在我們開(kāi)始編寫代碼部分:
首先在我們的類中添加以下數(shù)據(jù)成員:
private Icon m_Icon1;
private Icon m_Icon2;
private bool m_bFlag;
private bool m_bShowWnd;
修改Form1()函數(shù)為:
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
m_bFlag=true;
m_bShowWnd=true;
try
{
m_Icon1 = new Icon("Icon1.ico");//導(dǎo)入圖標(biāo)文件
m_Icon2 = new Icon("Icon2.ico");
}
catch ( Exception e )
{
MessageBox.Show("Error " + e.Message,"Animate Tray - Error");
menuItem2.Enabled = false;
menuItem3.Enabled = false;
}
}
添加menuItem1、menuItem2、menuItem3、m_trayIcon的Click事件,消息處理函數(shù)如下:
private void menuItem1_Click(object sender, System.EventArgs e)
{
timer1.Start();//打開(kāi)計(jì)時(shí)器
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
timer1.Stop();//停止計(jì)時(shí)器
}
private void menuItem3_Click(object sender, System.EventArgs e)
{
Application.Exit();//退出應(yīng)用程序
}
private void m_trayIcon_Click(object sender, System.EventArgs e)
{
if(m_bShowWnd == true)//隱藏主界面
{
this.Visible = false;
m_bShowWnd = false;
}
else//顯示主界面
{
this.Visible = true;
m_bShowWnd = true;
}
}
最后還要添加timer1的Tick()函數(shù):
private void timer1_Tick(object sender, System.EventArgs e)
{
if ( m_Icon1 != null && m_Icon2 != null ) //如果兩個(gè)圖標(biāo)文件都被正確載入
{
//只要timer1被啟動(dòng),則在兩個(gè)圖標(biāo)之間不斷進(jìn)行選擇變換,實(shí)現(xiàn)動(dòng)畫效果
if ( m_bFlag == true )
{
m_trayIcon.Icon = m_Icon2;
m_bFlag = false;
}
else
{
m_trayIcon.Icon = m_Icon1;
m_bFlag = true;
}
}
}
好了,按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)開(kāi)始"和"動(dòng)畫圖標(biāo)結(jié)束"可以控制圖標(biāo)狀態(tài)。
四.總結(jié):
做完這個(gè)程序,我們不難發(fā)現(xiàn)用C#做一些運(yùn)用程序效果是非常方便的。以前我在SDK、MFC下,用到了Shell_NotifyIcon()、TrackPopMenu()以及DestroyMenu(),還要自己添加消息處理函數(shù),工作量是非常大的,F(xiàn)在微軟為我們做好了這些工作,是不是很方便?快快加入C#的行列吧。