1、新建一个工程,将工程存到目录D:\BCBTray下,并在这个目录下拷入一个icon图标文件,文件名为Icon1.ico,作为本程序的系统托盘处的图标。 2、在这个工程中再增加一个窗体Form2,要注意的是这个工程中,Form1是启动窗体,它负责系统托盘图标的总控工作,并不负有其它责任。应用程序的主窗口是由Form2 来负责的。在Form1的代码窗Unit1.cpp增加如下代码: #include "Unit2.h" 3、将Form1的BorderStyle属性设置为bsNone 4、在Form1的OnShow事件写如下代码: void __fastcall TForm1::FormShow(TObject *Sender) { Form1->Width=0; } 5、在Form1中增加一个PopupMenu1,并为它增加一个子菜单:它的两个菜单条为:显示网址管理专家、退出程序。 为“显示网址管理专家”写如下单击事件: void __fastcall TForm1::N1Click(TObject *Sender) { Form2->Show(); } 为“退出程序”写如下单击事件: void __fastcall TForm1::N2Click(TObject *Sender) { Form1->Close(); } 6、在Form1的代码头文件Unit1.h中的TForm1的类定义的public成员函数中写下如下代码: __fastcall ~TForm1(); TIcon *MyIcon; void virtual __fastcall IconClick(TMessage& Msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_USER+100,TMessage,IconClick) END_MESSAGE_MAP(TForm) 这样,TForm1的类定义全貌为: class TForm1 : public TForm { __published: // IDE-managed Components TPopupMenu *PopupMenu1; TMenuItem *N1; TMenuItem *N2; void __fastcall N1Click(TObject *Sender); void __fastcall N2Click(TObject *Sender); void __fastcall FormShow(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1(); TIcon *MyIcon; void virtual __fastcall IconClick(TMessage& Msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_USER+100,TMessage,IconClick) END_MESSAGE_MAP(TForm) }; 7、在Unit1.cpp中的窗体的构造函数中写如下代码: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { MyIcon=new TIcon(); TNotifyIconData IconData; MyIcon->LoadFromFile("Icon1.ico"); IconData.cbSize=sizeof(IconData); IconData.hWnd=Handle; IconData.uID=100; IconData.hIcon=MyIcon->Handle; IconData.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; IconData.uCallbackMessage=WM_USER+100; strcpy(IconData.szTip,"网址管理专家 单击左键显示窗体"); Shell_NotifyIcon(NIM_ADD,&IconData); SetWindowLong(Application->Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); } 8、在Unit1.cpp中的窗体的析构函数中写如下代码: __fastcall TForm1::~TForm1() { TNotifyIconData IconData; IconData.cbSize=sizeof(IconData); IconData.hWnd=Handle; IconData.uID=100; Shell_NotifyIcon(NIM_DELETE,&IconData); delete MyIcon; } 9、在Unit1.cpp中写窗体的公用成员函数IconClick代码: void __fastcall TForm1::IconClick(TMessage& Msg) { TPoint po; if(Msg.LParam==WM_LBUTTONDOWN) { Form2->Show(); } if(Msg.LParam==WM_RBUTTONUP) { GetCursorPos(&po); PopupMenu1->Popup(po.x,po.y); } } 10、由于Shell_NotifyIcon函数定义在ShellAPI.hpp文件中所以请将下面一句写到Unit1.h中: #include <shellapi.hpp> 11、现在运行程序,系统图标就写到托盘中去了。 正文 
|