隐藏基于对话框程序

 
定义托盘响应消息:
#define WM_SYSTRAY WM_USER + 120
 
在头文件中定义变量:
WINDOWPLACEMENT m_wp;    // 以便在恢复时使用
NOTIFYICONDATA m_tmid;      // 托盘结构
CRect        m_rectWnd;       // 保存窗口区域
 
在初始化函数中加入:
              GetWindowRect(&m_rectWnd); // 恢复时使用
              GetWindowPlacement(&m_wp); //恢复时用
              ModifyStyleEx (WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); // 不在工具栏显示
                           
              WINDOWPLACEMENT wp;
             
              wp.length = sizeof(WINDOWPLACEMENT);
              wp.flags = WPF_RESTORETOMAXIMIZED;
              wp.showCmd = SW_HIDE;
              SetWindowPlacement(&wp);
             
              m_tmid.cbSize = sizeof (NOTIFYICONDATA);
              m_tmid.hWnd = this->m_hWnd;
              m_tmid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
              m_tmid.uCallbackMessage = WM_SYSTRAY;
              m_tmid.uID = IDR_MAINFRAME;
             
              CString sz = _T("");
              strcpy(m_tmid.szTip, "");
              HICON hIcon;
              hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
              m_tmid.hIcon = hIcon;
              PNOTIFYICONDATA m_ptnid = &m_tmid;
              ::Shell_NotifyIcon(NIM_ADD, m_ptnid);
              if (hIcon)
                     ::DestroyIcon(hIcon);
 
增加窗口消息函数 WM_DESTROY 增加如下
void CClientDlg::OnDestroy()
{
       CDialog::OnDestroy();
       ::Shell_NotifyIcon(NIM_DELETE ,&m_tmid);   
}
响应WindowProc消息
LRESULT CClientDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
        switch (message)
          {
          case WM_SYSTRAY:
                 if (lParam == WM_LBUTTONDBLCLK)
                 {
                        // 恢复窗口
                        ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);
                        SetWindowPlacement(&m_wp);
                        MoveWindow(m_rectWnd, TRUE);
                        CenterWindow();
                 }
                 break;
          case WM_SYSCOMMAND:
                 if (wParam == SC_MINIMIZE)
                 {
                        AfxGetMainWnd()->ShowWindow (SW_HIDE);
                        return 0;
                 }
 
                 if (wParam == SC_CLOSE)
                 {
                        OnCancel();
                        return 0;
                 }
                 break;
          }
      
       return CDialog::WindowProc(message, wParam, lParam);
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值