不想让窗口关闭,因此,想在点击叉叉的时候,实现的是最小化的功能,或者让叉叉变成灰色也行
请大家帮帮忙
是不是需要重载什么函数?

解决方案 »

  1.   

    捕足WM_CLOSE的消息
    case WM_CLOSE:
        ShowWindow(hWnd, SW_MINIMIZE);
      

  2.   

    应该是OnSysCommand吧
    当nID==SC_CLOSE为关闭按钮   
      

  3.   

    重载OnClose OnClose
    {
       min();//最小化
    }
      

  4.   

    将关闭按钮变灰:OnInitDialog函数中
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    pSysMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
    }
      

  5.   

    再给个方法
    新建消息处理函数
    OnNcHitTest(CPoint point)   
    {
    if(CWnd::OnNcHitTest(point) ==HTCLOSE )
    return HTMINBUTTON;
    }
      

  6.   

    可以重载OnClose,
    也可以吧叉叉直接去掉。。
      

  7.   

    void CMYModalView::OnSysCommand(UINT nID, LPARAM lParam)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 CFormView::OnSysCommand(nID, lParam); if(nID == SC_CLOSE)
    this->ShowWindow(SW_MINIMIZE);

    }这么写,实现不了最小化
      

  8.   

    截获WM_CLOSE消息
    case WM_CLOSE:
       PostMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);
      

  9.   

    Win32程序:
    case WM_CLOSE:
    ShowWindow(hWnd, SW_MINIMIZE);MFC:
    OnSysCommand
    当nID==SC_CLOSE为关闭按钮
      

  10.   

    利用OnSysCommand,添加如下代码到 OnSysCommandelse if(nID==SC_CLOSE   )
    {
    SendMessage(WM_NULL,0,0);
    DefWindowProc(WM_SYSCOMMAND,SC_MINIMIZE,lParam);

    }利用OnClose:
    void CXXXXXXXXXXXDlg::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default

    SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);
    /* CDialog::OnClose();*/
    }
      

  11.   

    在SDI 下的实现代码,VC++6.0 测试成功!
    void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
    {
     if(nID==SC_CLOSE )
    {
    SendMessage(WM_NULL,0,0);
    DefWindowProc(WM_SYSCOMMAND,SC_MINIMIZE,lParam);

    }
     else
     CFrameWnd::OnSysCommand(nID,lParam);
    }
    你需要手动添加消息处理:
    ON_WM_SYSCOMMAND()
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
      

  12.   

    拦截WM_CLOSE也成功,
    void CMainFrame::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default
    SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);
    /* CFrameWnd::OnClose();*/
    }或者:
    void CMainFrame::OnClose() 
    {
    SendMessage(WM_NULL,0,0);
      DefWindowProc(WM_SYSCOMMAND,SC_MINIMIZE,0);
    }
    但是,有一个缺点:
    就是连菜单的关闭也变成最小化了。以上几个帖子都要在CMainFrame中定义消息处理函数
      

  13.   

    OnClose() 
    这里设断点,程序都不会停,怎么回事?
      

  14.   

    MDI,测试成功,在CChildFrame里添加消息处理函数
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
            
            ON_WM_SYSCOMMAND()
    void CChildFrame::OnSysCommand(UINT nID, LPARAM lParam)
    {
       if(nID==SC_CLOSE )
     {
      SendMessage(WM_NULL,0,0);
      DefWindowProc(WM_SYSCOMMAND,SC_MINIMIZE,lParam);
     }

     else
     CMDIChildWnd::OnSysCommand(nID,lParam);}
      

  15.   


    这个方法会影响效率。simoreg 的方法可以,最好改成下面void CChildFrame::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if(nID==SC_CLOSE )
    {
    nID = SC_MINIMIZE;

    CMDIChildWnd::OnSysCommand(nID,lParam);}