用这个:LRESULT CMy011225D00Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
case WM_SYSCOMMAND:
if(wParam==SC_CLOSE)
{
TRACE("处理系统命令\n");
MessageBox("关闭按钮");
return 0;
}
break;
} return CDialog::WindowProc(message, wParam, lParam);
}

解决方案 »

  1.   

    重载CDialog::OnCancel(); 是对的,他的ID正是IDCANCEL,可以让他响应你的一个事件!
      

  2.   

    响应的是这个函数……
    void CDlgDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    }
    else
    {
    CDialog::OnSysCommand(nID, lParam);  // <---这个
    }
    }在else 之前加上 你对X 的处理函数就可以了。对了,消息是SC_CLOSE   Close the CWnd object.其他 的消息请参见 CWnd::OnSysCommand  
      

  3.   

    OnSysCommand  中处理SC_CLOSE