程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> Windows任務欄系統托盤圖標演示程序

Windows任務欄系統托盤圖標演示程序

編輯:vc教程

許多應用程序,如輸入法管理器、殺毒軟件等均在任務欄布告區中放置一個有自已特色的圖標,該圖標讓用戶知道有一個後台程序正在運行,同時也提供了一種修改設置的快捷方法,本文將以C++ Builder為例簡述它的實現方法。

打開一個新工程,將工程文件取名為test、單元文件取名為main。在窗口上放置二個按鈕、一個標簽,其屬性按如下設置

組件      屬性     值

Label1    Caption  按OK按鈕...終止程序

OKButton   Caption  &OKButton

CancelButton Caption  &CancelButton

打開文件main.h,加入斜體部分聲明(以手工輸入部分均以斜體表示,以下同)

class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *OKButton;
TButton *CancelButton;
TLabel *Label1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall OKButtonClick(TObject *Sender);
void __fastcall CancelButtonClick(TObject *Sender);
private: // User declarations
unsigned ugIconMessage;
void AddTray();
void DeleteTray();
protected:
virtual void __fastcall WndProc(Messages::TMessage &Message);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};

切換到main.cpp,加入以下函數及聲明

#include
#pragma hdrstop
#include
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TForm1::AddTray()//創建任務欄布告區圖標
{
NOTIFYICONDATA icondata;①
memset(&icondata,0,sizeof(icondata));②
icondata.cbSize=sizeof(icondata);
icondata.hWnd=Handle;③
strncpy(icondata.szTip,"我的任務",sizeof(icondata.szTip));④
Application->Icon->LoadFromFile("e:\\yxg\\map\\system\\ico\\yxg.ico");
icondata.hIcon=Application->Icon->Handle; ⑤
icondata.uCallbackMessage=ugIconMessage;⑥
icondata.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;⑦
Shell_NotifyIcon(NIM_ADD,&icondata);⑧
}
void TForm1::DeleteTray()//刪除任務欄布告區圖標
{
NOTIFYICONDATA icondata;
memset(&icondata,0,sizeof(icondata));
icondata.cbSize=sizeof(icondata);
icondata.hWnd=Handle;
Shell_NotifyIcon(NIM_DELETE,&icondata); ⑧
}
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
if(Message.Msg==ugIconMessage)//如果產生的是與該圖標相關的消息
{
if(Message.LParam==WM_LBUTTONDBLCLK)
Application->Terminate();⑨
if(Message.LParam==WM_RBUTTONDBLCLK)
{
ShowWindow(Application->Handle,SW_SHOW);//
Application->ShowMainForm=true;
Form1->Visible=true; ⑩
}
return;
}
TForm::WndProc(Message);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved