托盘的实现:

托盘的实现:
   [ 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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值