BCB如何将应用程序图标写到系统托盘中

类别:编程语言 点击:0 评论:0 推荐:

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、现在运行程序,系统图标就写到托盘中去了。
正文 

本文地址:http://com.8s8s.com/it/it25180.htm