托盘的实现:

托盘的实现:
   [ color=#FF00FF]1.[/color]了解NOTIFYICONDATA结构;
typedef struct _NOTIFYICONDATA {
  DWORD cbSize;          // 结构大小(sizeof struct),必须设置
  HWND hWnd;            // 发送通知消息的窗口句柄
  UINT uID;                //  图标ID ( 由回调函数的WPARAM 指定)
  UINT uFlags;           
  UINT uCallbackMessage;    // 消息被发送到此窗口过程
  HICON hIcon;            // 图标句柄
  CHAR szTip[64];          // 提示文本
} NOTIFYICONDATA;
BOOL Shell_NotifyIcon(
    DWORD dwMessage,
    PNOTIFYICONDATA pnid
);     
第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:      NIM_ADD:      添加一个图标到任务栏。
      NIM_MODIFY:    修改状态栏区域的图标。
      NIM_DELETE:    删除状态栏区域的图标。
      NIM_SETFOCUS:  将焦点返回到任务栏通知区域。当完成用户界面操作时,任务栏图标必须用此消息。例如,如果任务栏图标正   
                      显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。
      NIM_SETVERSION:指示任务栏按照相应的动态库版本工作。   
2.增加一个函数用来增加删除托盘图标:
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, PSTR pszTip)
{
    BOOL bReturn;
    NOTIFYICONDATA NofityData;
    NofityData.cbSize = sizeof(NOTIFYICONDATA);
    NofityData.hWnd = hWnd;
    NofityData.uID = IDR_MAINFRAME;
    NofityData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    NofityData.uCallbackMessage = WM_MY_TRAY_NOTIFICATION;
    NofityData.hIcon = hIcon;
    lstrcpyn(NofityData.szTip, pszTip, sizeof(NofityData.szTip));
    bReturn = Shell_NotifyIcon(dwMessage, &NofityData);
    if (hIcon)
        DestroyIcon(hIcon);
    return bReturn;
}
3.在TestDlg.cpp 文件中定义一个消息:
#define  WM_MY_TRAY_NOTIFICATION  WM_USER+100
4.定义一个消息处理函数,用于响应当鼠标单击或双击
LRESULT CTestDlg::OnTrayNotification(WPARAM wparam, LPARAM lparam)
{
switch (lparam )
{
case WM_RBUTTONUP:
case WM_LBUTTONDBLCLK:
ShowWindow(SW_SHOW);
    TrayMessage(m_hWnd, NIM_DELETE, NULL, ""); 
}
return 0;
}
5。最后就是实用拉。

void CTestDlg::OnBnClickedBtntray()
{
TrayMessage(m_hWnd, NIM_ADD, NULL, "我的托盘");
    TrayMessage(m_hWnd, NIM_MODIFY, m_hIcon, "我的托盘");
ShowWindow(SW_HIDE);
}
#函数的定义在***DLGDlg.h
protected:
// Generated message map functions
//{{AFX_MSG(CHideDLGDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnShow(WPARAM wparam, LPARAM lparam);
afx_msg LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
阅读更多
个人分类: vc++学习!~~
上一篇VC使用技巧
下一篇数据库查询以及插入LIST列表函数
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭