MFC 添加系统托盘图标

1. 定义 消息常量

#define WM_NOTIFYSHOWTASK (WM_USER + 10)

2. 添加消息映射

BEGIN_MESSAGE_MAP(CXXXDlg, CDialogEx)
    ON_MESSAGE(WM_NOTIFYSHOWTASK, OnNotifyShowTask)
END_MESSAGE_MAP()

3. 重写系统命令消息

void CTestToolDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
     switch(nID)
  {
  case SC_MINIMIZE:// 最小化窗口
  {
    NOTIFYICONDATA notifyid;
    ZeroMemory(&notifyid, sizeof(notifyid));
    notifyid.cbSize = static_cast<DWORD>(sizeof(notifyid));
    notifyid.hWnd = this->GetSafeHwnd();
    notifyid.uID = IDR_MAINFRAME;
    notifyid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;
    notifyid.uCallbackMessage = WM_NOTIFYSHOWTASK;        

   // 自定义的消息名称
   notifyid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
   // 信息提示条
   _tcscpy_s(notifyid.szTip, m_CurrEnvironment);

// 在托盘区添加图标

Shell_NotifyIcon(NIM_ADD, &notifyid);               

ShowWindow(SW_HIDE);                        // 隐藏主窗口
 return;
  }
  break;
 case SC_CLOSE:// 关闭窗口
  {
    NOTIFYICONDATA notifyid;
    ZeroMemory(&notifyid, sizeof(notifyid));
    notifyid.cbSize = sizeof(notifyid);
    notifyid.hWnd = this->GetSafeHwnd();
    notifyid.uID = IDR_MAINFRAME;
    notifyid.uFlags = NIF_ICON;

    // 托盘图标不显示
    Shell_NotifyIcon(NIM_DELETE, &notifyid);     

   }
  break;
 }
    CDialogEx::OnSysCommand(nID, lParam);
}

4. 添加消息影射函数
LRESULT CTestToolDlg::OnNotifyShowTask(WPARAM wParam, LPARAM lParam)
{
    if((IDR_MAINFRAME == wParam) && (/*WM_LBUTTONUP*/WM_LBUTTONDBLCLK == lParam))
    {
        ShowWindow(SW_SHOW); // 显示主窗口
  return TRUE;
    }
    return FALSE;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值