13,825
社区成员
发帖
与我相关
我的任务
分享
//---------------------------------------------------------------------------
#ifndef TrayIconH
#define TrayIconH
//---------------------------------------------------------------------------
#define ICON_MESSAGE (WM_USER+111)
class TRAYICON
{
// Private Attributes
private:
HWND m_hWnd;
//托盘图标
NOTIFYICONDATA icondata;
public:
TRAYICON(HWND hWnd);
~TRAYICON();
//TrayIcon编程:移除任务栏上的图标
void RemoveTrayIcon();
//TrayIcon编程:加任务栏上的图标
void AddTrayIcon(AnsiString title,AnsiString info);
//更改TrayIcon的图标
void ChangeTrayIcon(AnsiString title,AnsiString info,HICON Icon);
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "TrayIcon.h"
#pragma package(smart_init)
//------------------------------------------------------------------------------------
TRAYICON::TRAYICON(HWND hWnd)
{
m_hWnd=hWnd;
}
//------------------------------------------------------------------------------------
TRAYICON::~TRAYICON()
{
RemoveTrayIcon();
}
//------------------------------------------------------------------------------------
//***********************TrayIco编程*******************************************//
//* 气泡提示的实现 *//
//* title:气泡提示标题栏 *//
//* info:气泡提示的内容 *//
//*******************AddTrayIcon(String title,String info)****************//
void TRAYICON::AddTrayIcon(AnsiString title,AnsiString info)
{
memset(&icondata,0,sizeof(icondata));
icondata.cbSize=sizeof(icondata);
icondata.hWnd=m_hWnd;
icondata.hIcon=Application->Icon->Handle;
strncpy(icondata.szTip,Application->Title.c_str(),sizeof(icondata.szTip));
//自定义消息用于鼠标右键popumenu的实现
icondata.uCallbackMessage=ICON_MESSAGE;
icondata.uFlags=NIF_MESSAGE|NIF_INFO|NIF_ICON;
icondata.uTimeout=500;
icondata.dwInfoFlags=NIIF_INFO;
strcpy(icondata.szInfoTitle,title.c_str());
strcpy(icondata.szInfo,info.c_str());
Shell_NotifyIcon(NIM_ADD,&icondata);
}
//==================== RemoveTrayIcon()=========================================
//* 气泡消息的删除
//******************************************************************************
void TRAYICON::RemoveTrayIcon()
{
Shell_NotifyIcon(NIM_DELETE,&icondata);
}
//******************************************************************************
//更改TrayIco的图标
void TRAYICON::ChangeTrayIcon(AnsiString title,AnsiString info,HICON Icon)
{
icondata.hIcon=Icon;
strcpy(icondata.szInfoTitle,title.c_str());
strcpy(icondata.szInfo,info.c_str());
strncpy(icondata.szTip,(title+"\n状态:"+info).c_str(),sizeof(icondata.szTip));
Shell_NotifyIcon(NIM_MODIFY,&icondata);
}
//-----------------------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "TrayIcon.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TRAYICON *TrayIcon=NULL;//系统托盘
。。。。。。
//---------------------------------------------------------------------------
//窗体创建
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//TrayIcon=new TRAYICON(Handle);//系统托盘类
//TrayIcon->AddTrayIcon("标题","内容");
}
//---------------------------------------------------------------------------
//重载消息处理WndProc()函数,响应托盘右键消息
void __fastcall TForm1::WndProc(TMessage &Msg)
{
//重载TForm1的WndProc函数,加入对自定义消息的处理代码,
if(Msg.Msg==ICON_MESSAGE)
{
if(Msg.LParam==WM_RBUTTONDOWN)
{
POINT mouse;
GetCursorPos(&mouse);//如果双击图标,弹出菜单
PopupMenu1->Popup(mouse.x,mouse.y);
}
}
TForm::WndProc(Msg);
}
//---------------------------------------------------------------------------
//窗体关闭
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(TrayIcon!=NULL)
{
TrayIcon->RemoveTrayIcon();//从任务栏移除TrayIcon
delete TrayIcon;//释放TrayIcon
}
}
//---------------------------------------------------------------------------
//单击button1控件,在系统托盘图标里,出现气泡提示
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(TrayIcon==NULL)
{
TrayIcon=new TRAYICON(Handle);//系统托盘类
}
TrayIcon->AddTrayIcon("标题","内容");
}
//---------------------------------------------------------------------------
//单击button2控件,修改气泡提示的内容
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(TrayIcon!=NULL)
{
TrayIcon->ChangeTrayIcon("修改标题","修改气泡提示的内容",Application->Icon->Handle);//系统托盘显示
}
}
//---------------------------------------------------------------------------