托盘程序实例

托盘程序实例

      一.托盘相关内容
     1.Shell_NotifyIcon函数
      BOOL Shell_NotifyIcon(
             DWORD dwMessage, 
             PNOTIFYICONDATA pnid
         );   
     第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:

NIM_ADD:       添加一个图标到任务栏。
NIM_MODIFY:    修改状态栏区域的图标。
NIM_DELETE:    删除状态栏区域的图标。
NIM_SETFOCUS:  将焦点返回到任务栏通知区域。当完成用户界面操作时,任务栏图标必须用此消息。例如,如果任务栏图标正
显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。
NIM_SETVERSION:指示任务栏按照相应的动态库版本工作。      

            第二个参数pnid是NOTIFYICONDATA结构的地址,其内容视dwMessage的值而定。这个结构在SHELLAPI.H文件中定义如下:   


      2.NOTIFYICONDATA结构
      typedef struct _NOTIFYICONDATA {
               DWORD cbSize;           // 结构大小(sizeof struct),必须设置
               HWND hWnd;             // 发送通知消息的窗口句柄
               UINT uID;                //  图标ID ( 由回调函数的WPARAM 指定)
               UINT uFlags;            
               UINT uCallbackMessage;    // 消息被发送到此窗口过程
               HICON hIcon;             // 图标句柄
               CHAR szTip[64];          // 提示文本
         } NOTIFYICONDATA;

      uFlags的值:
         #define NIF_MESSAGE 0x1   // 表示uCallbackMessage 有效
         #define NIF_ICON    0x2   // 表示hIcon 有效
         #define NIF_TIP     0x4   // 表示szTip 有效  

         二.开发步骤
         1.定义托盘结构
          在类里添加成员NOTIFYICONDATA nd;
          给nd赋值:

    nd.cbSize=sizeof(NOTIFYICONDATA);
    nd.hWnd
=this->m_hWnd;
    nd.hIcon
=this->m_hIcon;
    nd.uID
=IDR_MAINFRAME;
    nd.uFlags
=NIF_ICON|NIF_MESSAGE|NIF_TIP;
    nd.uCallbackMessage
=WM_NOTIFYICON;
    strcpy(nd.szTip,
"my notify icon");

         2.添加托盘图标
            Shell_NOtifyIcon(NIM_ADD,&nd);

         3.加入托盘消息响应函数
          CPP:   
          LONG CbackdropDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
         {...}
         头文件的DECLARE_MESSAGE_MAP()之前添加:
            afx_msg LONG OnNotifyIcon(WPARAM,LPARAM);
         4.在退出之前删除托盘图标
             添加OnDestory事件:
                  :Shell_NotifyIcon(NIM_DELETE,&nd);           

你可能感兴趣的:(托盘程序实例)