windows托盘程序和泡泡提示简单攻略

 很多初学MFC的人对于系统托盘程序和泡泡提示很好奇,但却有种望而生畏的感觉,其实只需要以下3个函数和一个自定义消息和消息处理函数就够了.
我们先来认识一下这几个函数

BOOL AddToTray();//添加托盘图标
void RemoveFromTray();//移除托盘图标
BOOL ShowBalloonTip(LPCTSTR szMsg,LPCTSTR szTitle,

                                    UINT uTimeout, DWORD dwInfoFlags);//显示泡泡提示

#define   WM_TRAYMENU   WM_USER+3001//自定义消息
ON_MESSAGE(WM_TRAYMENU,OnTrayMenu)//消息处理
afx_msg void OnTrayMenu(WPARAM wParam,LPARAM lParam);//消息处理函数

这几个函数都是在MFC 主框架类中定义的:

  1. BOOL CMainFrame::AddToTray()//初始化主框架时调用
  2. {
  3.     nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//NOTIFYICONDATA nid;
  4.                                    //   NOTIFYICONDATA结构请参考MSDN
  5.     nid.hWnd=this->m_hWnd;
  6.     nid.uID=IDR_MAINFRAME;
  7.     nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
  8.     nid.uCallbackMessage=WM_TRAYMENU;//消息名
  9.     nid.hIcon=LoadIcon(AfxGetInstanceHandle(),
  10.                        MAKEINTRESOURCE(IDR_MAINFRAME));
  11.     sprintf(nid.szTip,"我的程序名");
  12.     Shell_NotifyIcon(NIM_ADD,&nid);//添加托盘图标
  13.     return TRUE;
  14. }
  15. void CMainFrame::RemoveFromTray()//在销毁的时候调用,
  16.                    //否则程序意外退出后需要鼠标移上去托盘图标才会消失
  17. {
  18.     nid.uFlags = 0;
  19.     Shell_NotifyIcon(NIM_DELETE, &nid);//移除托盘图标
  20. }
  21. /*例如:ShowBalloonTip("欢迎登录","我的程序名",4000,NIIF_INFO);*/
  22. BOOL CMainFrame::ShowBalloonTip(LPCTSTR szMsg,LPCTSTR szTitle, UINT uTimeout, DWORD dwInfoFlags)
  23. {
  24.  nid.cbSize=sizeof(NOTIFYICONDATA);
  25.  nid.uFlags = NIF_INFO;//提示类型 ,用于显示泡泡左上方不同图标,
  26.                            //另外还有NIIF_ERROR等
  27.  nid.uTimeout = uTimeout;//提示时间
  28.  nid.dwInfoFlags = dwInfoFlags;
  29.  strcpy(nid.szInfo,szMsg ? szMsg : _T(""));//提示信息
  30.  strcpy(nid.szInfoTitle,szTitle ? szTitle : _T(""));//提示标题
  31.  return Shell_NotifyIcon(NIM_MODIFY, &nid);
  32. }
  33. /*响应在托盘上的动作*/
  34. void CMainFrame::OnTrayMenu(WPARAM wParam,LPARAM lParam)
  35. {
  36.  if(wParam!=IDR_MAINFRAME)
  37.   return ;
  38.     switch(lParam)
  39.     {
  40.  case WM_RBUTTONUP://右键起来时弹出快捷菜单
  41.   {
  42.    
  43.    POINT point;
  44.    ::GetCursorPos(&point);//得到鼠标位置
  45.    CMenu menu;
  46.    menu.LoadMenu(IDR_MENU_TRAY);//你的菜单资源
  47.    CMenu* file_menu = menu.GetSubMenu(0);    
  48.    ASSERT(file_menu);
  49.    
  50.    this->SetForegroundWindow();
  51.    file_menu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, 
  52.     point.y, this); 
  53.    menu.DestroyMenu();//资源回收    
  54.   }
  55.   break;
  56.     case WM_LBUTTONUP://单击左键的处理
  57.   {
  58.    ShowWindow(SW_SHOW);//简单的显示主窗口,为了使托盘程序比较专业,
  59.                           //最小化时进行了ShowWindow(SW_HIDE);
  60.   }
  61.   break;
  62.     }
  63. }

将这3个函数在你的MainFrame.h 和.cpp中定义,声明WM_TRAYMENU并添加定义消息处理函数然后在初始化主框架时调用AddToTray(),销毁的时候调用RemoveFromTray(),需要提示的时候调用ShowBalloonTip(...)。

 

补充一下:泡泡提示需要IE5以上的支持,也就是说,你的程序必须运行于高于或等于IE5版本的Windows系统上;

相应的你的开发包也应该使用支持IE5以上的SDK,如果你是使用的是VC6,那很可能需要安装一个sdk如xp sp2 sdk

这个可以在很多地方下载到,安装好后记得把include目录所在位置加到你的vc6的搜索路径中,而且需要排到首位。

如:E:/XP_SDK_SP2/INCLUDE

 

(完)

 

  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值