在CMainFrame类中响应WM_CLOSE消息,试试如下代码:void CMainFrame::OnClose() 
{
// TODO: Add your message handler code here and/or call default
MessageBox("abc","Message");
CFrameWnd::OnClose();
}

解决方案 »

  1.   

    怎么可能不行呢?
    用classwizard添加消息WM_DESTROY
    void CDialogkey::OnDestroy() 
    { MessageBox("关闭窗口");
    CDialog::OnDestroy();
             // TODO: Add your message handler code here
    }
      

  2.   

    在对消息WM_NCHITTEST的处理代码中,添加:
    if(CWnd::OnNcHitTest()==HTCLOSE)
    {
        //在下面添加你的相应代码
    }
      

  3.   

    在ON_CLOSE中可以,同时,WM_DESTORY中一定可以,在调用OnClose()后就会调用WM_DESTORE。
      

  4.   

    WM_CLOSE 在调用缺省的父类OnClose()以前可以,
    在调用父类OnClose 以后写的代码将不予执行,
     如:void CMainFrame::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default
    CFrameWnd::OnClose();MessageBox("abc","Message");//不能执行
    }
    在WM_DESTROY 中的程序虽然执行,但此时主窗口已关闭,有兴趣的朋友可以探讨以下。
      

  5.   

    可以在OnSysCommand(UINT nID, LPARAM lParam )中拦截,nID为SC_CLOSE,CWnd::OnSysCommand(nID,lParam)将给窗体发WM_CLOSE消息。
      

  6.   

    CMainFrame::OnCreate(...)
    ...
    //Disable close button
    CMenu *pSysMenu = GetSystemMenu(FALSE);
    ASSERT(pSysMenu != NULL);
    VERIFY(pSysMenu->RemoveMenu(SC_CLOSE, MF_BYCOMMAND)); 
    ...