VC中使用托盘机制

在VC中使用托盘机制,在系统托盘中显示一个图标,用户在图标单击右键时,显示一个简单的菜单。

1,新建一个简单的对话框工程;

2,建立一个菜单,ID命名为IDR_MENUPOP;

3,在对话框类源文件中定义一个托盘响应消息和一个托盘结构变量:

#define WM_SHOWTASK (WM_USER+101) //自定义托盘响应消息 
NOTIFYICONDATA struct_Nid;   //托盘结构变量

4,在对话框头文件的消息映射函数定义托盘响应消息函数:

 afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);
5,在对话框源文件消息映射部分,将托盘处理函数和消息相关联:

 ON_MESSAGE(WM_SHOWTASK,onShowTask)

6,托盘响应函数

//托盘响应
LRESULT CATSTServerDlg::onShowTask(WPARAM wParam,LPARAM lParam)
{
 switch(lParam)
    {
 case WM_RBUTTONUP:
  {
   CMenu menu;
   if(!menu.LoadMenu(IDR_MENUPOP)) break;
   CMenu* pSubMenu = menu.GetSubMenu(0);
   if(!pSubMenu) break;
   CPoint pos;
   GetCursorPos(&pos);
   pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,pos.x,pos.y, this, NULL);
   menu.DestroyMenu();
  }
  break;   
 case WM_LBUTTONDBLCLK:
  {
   //ShowWindow(SW_SHOW);
  }
  break;
 }
 return 0;
}

7,在对话框初始函数中加入对托盘的初始化处理


 //向托盘添加图标
 struct_Nid.cbSize = sizeof(struct_Nid);
 struct_Nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
 struct_Nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 strcpy(struct_Nid.szTip,"通讯服务程序");
 struct_Nid.uCallbackMessage = WM_SHOWTASK;
 struct_Nid.uID = 10;
 struct_Nid.hWnd =m_hWnd;
 Shell_NotifyIcon(NIM_ADD, &struct_Nid);

8,系统退出时删除托盘图标

 //退出时删除托盘图标
 Shell_NotifyIcon(NIM_DELETE,&struct_Nid);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lujunql

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值