现在的位置: 首页 > 综合 > 正文

怎样是程序显示在系统托盘中

2013年09月09日 ⁄ 综合 ⁄ 共 1652字 ⁄ 字号 评论关闭
TIcon *MyIcon = new TIcon;
MyIcon->LoadFromFile(ExtractFilePath(ParamStr(0))+/"////Day 1.ico/");

TNotifyIconData IconData;
//是自定义的NotifyIcon变量的大小
IconData.cbSize = sizeof(IconData);
//希望托盘程序产生的消息有哪个窗体来处理就让Wnd指向那个窗体句柄
IconData.hWnd = MainForm->Handle;
//区别其他系统托盘小程序的ID
IconData.uID = 100;
//托盘图标的句柄,根据这个句柄你就可以增加、修改、删除图标
IconData.hIcon = MyIcon->Handle;
/*uFlags : 一个标志位,它表示当前所创建的托盘程序具有哪些性质
  NIF_ICON 表示当前所设置的图标(即hIcon的值)是有效的
  NIF_MESSAGE 表示当前所设置的系统消息(即uCallBackMessage的值)是有效的
  NIF_TIP 表示当前所设置的提示条(即szTip的值)是有效的 
*/
IconData.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;

/* uCallBackMessage : 这是7个部分里面最重要的一个。这里指定一个回调消息,也就是说这里定义一个消息名,当你单击或者右击托盘图标的时候就会向你在Wnd所指向的窗体发送一个在uCallBackMessage中定义的消息名,然后你在程序中定义一个消息出来函数来处理这个消息。这样就把Windows关于消息的整套流程都处理好了*/
IconData.uCallbackMessage = WM_USER+100;
//szTip就是当你的鼠标放到任务栏托盘的小图标上的时候弹出来的提示信息
strcpy(IconData.szTip,/"网址管理专家 单击左键显示窗体/");
Shell_NotifyIcon(NIM_ADD,&IconData);
SetWindowLong(Application->Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);

同时在主窗体中TIcon对象创建消息事件:
  public:
        void virtual __fastcall IconClick(TMessage& Msg);
        bool SystemShutDown(UINT uFlag);
        BEGIN_MESSAGE_MAP
          MESSAGE_HANDLER(WM_USER+100,TMessage,IconClick)
        END_MESSAGE_MAP(TForm)
//-----------------------------------------------------------------
void __fastcall TMainForm::IconClick(TMessage& Msg)
{
  TPoint po;
  if(Msg.LParam==WM_LBUTTONDOWN)
  {
    this->Show();
  }
  if(Msg.LParam==WM_RBUTTONUP)
  {
    GetCursorPos(&po); //获取当前鼠标的坐标值
    AdvPopupMenu1->Popup(po.x,po.y);
  }     
}
//-------------------------------------------------------------------

结束时:
TNotifyIconData IconData;
IconData.cbSize = sizeof(IconData);
IconData.hWnd = MainForm->Handle;
IconData.uID = 100;
Shell_NotifyIcon(NIM_DELETE,&IconData);
delete MyIcon; 

抱歉!评论已关闭.