MFC程序最小化到托盘

来源:互联网 发布:imap.126.com 端口 编辑:程序博客网 时间:2024/04/25 16:48

网上搜的代码确实能实现最小化到托盘,但关闭程序时,托盘图标还在,原因是没删除图标,需屏幕刷屏才消失!

其实删除挺简单的,处理一下关闭窗口消息,使用NIM_DELETE就行了,具体看代码...

 

一,自定义一个消息WM_SHOWTASK,并关联消息映射函数OnShowTask()

 

#define WM_SHOWTASK (WM_USER + 1)   

ON_MESSAGE(WM_SHOWTASK,OnShowTask)   
   
LRESULT CtestDlgDlg::OnShowTask(WPARAM wParam, LPARAM lParam)   
//wParam接收的是图标的ID,lParam接收的是鼠标的动作  
{   
    if(wParam != IDR_MAINFRAME)   
        return 1;   
    if(WM_LBUTTONDBLCLK == lParam)  
    {    
        ShowWindow(SW_SHOW); // 显示主窗口  
    }   
    return 0;   
}  

 

二,SC_MINIMIZE、SC_CLOSE消息处理,重载WM_SYSCOMMAND消息处理

 

if(nID == SC_MINIMIZE) // 最小化窗口
{
    NOTIFYICONDATA nid;
    nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
    nid.hWnd = this->m_hWnd;
    nid.uID = IDR_MAINFRAME;
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;
    nid.uCallbackMessage = WM_SHOWTASK;         // 自定义的消息名称
    nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
    strcpy_s(nid.szTip, "程序窗口标题");        // 信息提示条
    Shell_NotifyIcon(NIM_ADD, &nid);            // 在托盘区添加图标
    ShowWindow(SW_HIDE);                        // 隐藏主窗口
    return;
}
else(nID == SC_CLOSE) // 关闭窗口
{
    NOTIFYICONDATA nd;
    nd.cbSize    = sizeof (NOTIFYICONDATA);
    nd.hWnd    = this->m_hWnd;
    nd.uID   =   IDR_MAINFRAME;
    Shell_NotifyIcon(NIM_DELETE, &nd);    // 托盘图标不显示
}
 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/LightBoat09/archive/2010/12/11/6069792.aspx

原创粉丝点击