托盘编程

来源:互联网 发布:php抓取手机号码 编辑:程序博客网 时间:2024/04/29 19:27

 1.托盘操作

      函数原型: BOOL Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA lpdata);

      返回值

            如果图标操作成功返回TRUE,否则返回FALSE。

            如果dwMessage参数设为NIM_SETVERSION,则如果版本设置成功返回TRUE,如果设置的版本不支持返回FALSE。

      参数说明:
      >dwMessage为输入参数,传递发送的消息,表明要执行的操作。可选的值如下:

  NIM_ADD

  向托盘区域添加一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示这个图标,以便以后再次使用Shell_NotifyIcon对此图标操作。

  NIM_DELETE

  删除托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示需要被删除的这个图标。

  NIM_MODIFY

  修改托盘区域的一个图标。此时第二个参数lpdata指向的NOTIFYICONDATA结构体中的hWnd和uID成员用来标示需要被修改的这个图标。

      注意:在修改图标的时候,只需要修改NOTIFYICONDATA的hIcon就行了。呵呵我们再做闪烁托盘的时候经常用到哦!

  NIM_SETFOCUS

  Version 5.0. 设置焦点。比如当用户操作托盘图标弹出菜单,而有按下ESC键将菜单消除后,程序应该使用此消息来将焦点设置到托盘图标上。

  NIM_SETVERSION

  Version 5.0. 设置任务栏按照第二个参数lpdata指向的NOTIFYICONDATA结构体中的uVersion成员指定的版本号来工作。此消息可以允许用户设置是否使用基于Windows2000的version 5.0的风格。uVersion的缺省值为0,默认指明了使用原始Windows 95图标消息风格。具体这两者的区别请参考msdn中的Shell_NotifyIcon函数说明的Remarks。

  >lpdata为输入参数,是指向NOTIFYICONDATA结构体的指针,结构体内容用来配合第一个参数wMessage进行图标操作

          NOTIFYICONDATA 结构体说明:

 

             typedef struct _NOTIFYICONDATA {

  DWORD cbSize;    //大小

  HWND hWnd;       //窗口的句柄

  UINT uID;             //应用程序定义的任务栏图标的标识符

  UINT uFlags;        //标志:此成员表明具体哪些其他成员为合法数据

  UINT uCallbackMessage;//回调消息

  HICON hIcon;       //增加、修改或删除的图标的句柄

  TCHAR szTip[64]; //提示信息串(/0)结束

  DWORD dwState; //图标状态。NIS_HIDDEN(隐藏)/NIS_SHAREDICON (共享)

  DWORD dwStateMask;//指明dwState成员的那些位可以被设置或者访问

  TCHAR szInfo[256];//气球提示内容,删除该内容:设置uFlags成员为NIF_INFO,同时将szInfo设为空

  union {

  UINT uTimeout;//气球提示的时间

  UINT uVersion;//图标版本

  };

  TCHAR szInfoTitle[64];//气球提示标题

  DWORD dwInfoFlags;//气球提示框增加一个图标。在气球提示标题的左侧,szInfoTitle成员设为空字符串,则图标也不会显示.

  GUID guidItem;//保留成员

  } NOTIFYICONDATA, *PNOTIFYICONDATA;

 

    注意:

      标志成员uFlags可取的值:

            NIF_ICON             hIcon成员起作用。
              NIF_MESSAGE  uCallbackMessage成员起作用。

          NIF_TIP                szTip成员起作用。
              NIF_STATE            dwState和dwStateMask成员起作用。
              NIF_INFO              使用气球提示代替普通的工具提示框。szInfo, uTimeout, szInfoTitle和dwInfoFlags成员起作用。
              NIF_GUID             保留。

      标志成员dwInfoFlags可取的值:

             NIIF_ERROR  错误图标。

         NIIF_INFO  信息图标。

         NIIF_NONE  没有图标。

         NIIF_USER  使用用户使用hIcon成员指明的图标,要求Windows XP Service Pack 2 (SP2)或以后系统。

         NIIF_WARNING  警告图标。

         NIIF_ICON_MASK  Version 6.0. 保留。

         NIIF_NOSOUND Version 6.0. 禁止播放相应声音。

      

2.消息处理

        刚才我们看到了,对于托盘的消息我们是可以添加响应消息函数的,如下:

        >定义消息ID

             #define WM_NOTIFYSHELL     WM_USER+100

        >定义响应函数

              LRESULT OnNotificationPan (WPARAM wParam, LPARAM lParam);

        >添加消息映射

              ON_MESSAGE(WM_NOTIFYSHELL, OnNotificationPan)  

        >实现OnNotificationPan

              LRESULT CTest::OnNotificationPan(WPARAM wParam, LPARAM lParam)
                {
                      switch ( lParam )
                          {
                                case WM_RBUTTONDOWN:
                                              break;
                                 case WM_LBUTTONDBLCLK:
                                               break;
                                  default:
                                             break;
                            }
                        return 0;
                }

      3.实例

  m_notifyData.cbSize    = sizeof (NOTIFYICONDATA);//m_notifyData是头文件定义的成员
  m_notifyData.hWnd    = m_hWnd;
  m_notifyData.uID    = IDR_MAINFRAME;
  m_notifyData.uFlags    = NIF_ICON|NIF_MESSAGE|NIF_TIP;
  m_notifyData.uCallbackMessage = WM_NOTIFYSHELL;
  m_notifyData.hIcon    = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

    //WTL使用  LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME));
  

   lstrcpy(m_notifyData.szTip, GATEWAY_INFO);
  Shell_NotifyIcon(NIM_ADD, &m_notifyData);

 

 

 

    托盘其实就是这么简单,哈哈,OVER。

原创粉丝点击