明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

C#下完成動(dòng)態(tài)系統(tǒng)托盤圖標(biāo)

[摘要]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#的行列吧。