用MFC创建多文档程序, 现在想响应最小化消息, 把程序缩小到托盘, 怎么来响应该最小化时的消息呢?谢谢!

解决方案 »

  1.   

    托盘实现最大化最小化的例子,希望对你有帮助
    http://www.codeproject.com/KB/shell/systemtray.aspx
      

  2.   

    响应CMainFrame的WM_SYSCOMMAND消息:
    void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam) 
    {
    // TODO: Add your message handler code here and/or call default
    if ((nID & 0xFFF0) == SC_MINIMIZE )
    {
    ShowWindow(SW_HIDE);
    Shell_NotifyIcon(NIM_ADD,&m_traydata);
    }
    else CFrameWnd::OnSysCommand(nID, lParam);

    }定义:
    NOTIFYICONDATA m_traydata;
    在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中加:
    m_traydata.cbSize = sizeof(NOTIFYICONDATA);
    m_traydata.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//IDR_MAINFRAME图标
    m_traydata.hWnd = m_hWnd;
    char  *m_str = "系统管理";
    strncpy(m_traydata.szTip,m_str,strlen(m_str)+1);//strlen +1表示将空字符拷贝到目标字符串中
    m_traydata.uCallbackMessage = WM_TRARMESSAGE;
    m_traydata.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;写自定义消息:
    #define WM_TRARMESSAGE                  201afx_msg void OnTrayMessage(WPARAM wParam, LPARAM lParam);
    void CMainFrame::OnTrayMessage(WPARAM wParam, LPARAM lParam)
    {
    if (lParam == WM_LBUTTONDOWN)
    {
    ShowWindow(SW_RESTORE);

    }
    else if (lParam == WM_RBUTTONDOWN)
    {
    CPoint m_point;
    ::GetCursorPos(&m_point);
    CMenu m_popmenu;
    m_popmenu.LoadMenu(IDR_MAINFRAME);//菜单ID
    CMenu* m_submenu = m_popmenu.GetSubMenu(0);
    m_submenu->TrackPopupMenu(TPM_LEFTBUTTON |TPM_LEFTALIGN ,m_point.x,m_point.y,this);

    } }
      

  3.   

    响应CMainFrame的WM_SYSCOMMAND消息:
    void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam) 
    {
    // TODO: Add your message handler code here and/or call default
    if ((nID & 0xFFF0) == SC_MINIMIZE )
    {
    ShowWindow(SW_HIDE);
    Shell_NotifyIcon(NIM_ADD,&m_traydata);
    }
    else CFrameWnd::OnSysCommand(nID, lParam);

    }定义:
    NOTIFYICONDATA m_traydata;
    在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中加:
    m_traydata.cbSize = sizeof(NOTIFYICONDATA);
    m_traydata.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//IDR_MAINFRAME图标
    m_traydata.hWnd = m_hWnd;
    char  *m_str = "系统管理";
    strncpy(m_traydata.szTip,m_str,strlen(m_str)+1);//strlen +1表示将空字符拷贝到目标字符串中
    m_traydata.uCallbackMessage = WM_TRARMESSAGE;
    m_traydata.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;写自定义消息:
    #define WM_TRARMESSAGE                  201afx_msg void OnTrayMessage(WPARAM wParam, LPARAM lParam);
    void CMainFrame::OnTrayMessage(WPARAM wParam, LPARAM lParam)
    {
    if (lParam == WM_LBUTTONDOWN)
    {
    ShowWindow(SW_RESTORE);

    }
    else if (lParam == WM_RBUTTONDOWN)
    {
    CPoint m_point;
    ::GetCursorPos(&m_point);
    CMenu m_popmenu;
    m_popmenu.LoadMenu(IDR_MAINFRAME);//菜单ID
    CMenu* m_submenu = m_popmenu.GetSubMenu(0);
    m_submenu->TrackPopupMenu(TPM_LEFTBUTTON |TPM_LEFTALIGN ,m_point.x,m_point.y,this);

    } }