我原先是用对话框实现的,现在想改到单文档程序来实现。
但是
跟踪发现:单文档程序的OnSize(),只有最大化的消息能触发它,最小化的操作没反映!!晕!!

解决方案 »

  1.   

    怎么可能呢?
    NOTIFYICONDATA nid;
    nid.cbSize = sizeof(nid);
    nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
    nid.hIcon = AfxGetApp()->LoadIcon(IDI_ICON_DOG); strcpy(nid.szTip,"看门狗");
    nid.uCallbackMessage = WM_SHOWTASK;
    nid.uID = 10;
    nid.hWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
    Shell_NotifyIcon(NIM_ADD, &nid);
      

  2.   

    一、单文档程序最小化和最大化时是触发OnSize事件吗?
    二、SIZE_MAXIMIZED和SIZE_MINIMIZED的值是什么?在哪里可以查到。
      

  3.   

    一、单文档程序最小化和最大化时是触发OnSize事件吗?
    二、SIZE_MAXIMIZED和SIZE_MINIMIZED的值是什么?在哪里可以查到。
    ===============================
    1、参考:
    void CBCP_SERACHDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    }
    else if (nID == SC_MINIMIZE)//最大化
    {
    CDialog::OnSysCommand(nID, lParam);
    }
    else if(nID == SC_MAXIMIZE)//最小化
    {

    CDialog::OnSysCommand(nID, lParam);
    }
    else if(nID == SC_RESTORE)//还原大小
    {
    CDialog::OnSysCommand(nID, lParam);
    }
    else
    {
    CResizableDialog::OnSysCommand(nID, lParam);
    }
    }
      

  4.   

    对,最小化的消息在 OnSysCommand 里,正是  vcleaner(我没当大哥很久了.......)  所说
      

  5.   

    OnSysCommand对应的是什么消息?
    WM_SIZE不就是对应窗口大小变化的消息吗?怎么又出来了一个OnSysCommand???
      

  6.   

    处理WM_SYSCOMMAND消息
    LRESULT CXXXX::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    { switch(message)
        {
        case WM_SYSCOMMAND:
        if(LOWORD(wParam)==SC_MINIMIZE)
            MessageBox("最小化窗口的按鈕OK!");
              break;         
        }
        return CDialog::WindowProc(message, wParam, lParam);
    }
      

  7.   

    如果你要重载OnSysCommand函数,需要在CMainFrame的头文件中将afx_msg void OnSysCommand(UINT nID,LONG lParam);写在//}}AFX_MSG的后面,DECLARE_MESSAGE_MAP()的前面,在CMainFrame的执行文件中:
        //}}AFX_MSG_MAP
        ON_WM_SYSCOMMAND()
    END_MESSAGE_MAP()
      

  8.   

    各位大哥:
    还是不对!!
    我重载OnSysCommand函数也还是没反映。是不是单文档和对话框的处理有什么不同呢??
      

  9.   

    已经帮你修改好了,自己看看邮件中的内容吧!
    因为是SDI程序应该在CMainFrame中截获消息,如果是MDI程序那么应该在CChildFrame中截获。已经帮你做了修改,注意AfxMessageBox的显示信息即可!