void CAdoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
                 if (SC_CLOSE == nID)
                 {
                  }
CDialog::OnSysCommand(nID, lParam); }
}都已经执行到了SC_CLOSE这里,并且进入CDialog::OnSysCommand(nID, lParam)这个函数内部了,但是最后对话框确实没有别关闭小弟苦思:单步皆不得要领。
请教各位大侠原因何在。还望各位乡亲父老看在党国的份上,拉兄弟一把……指教一下

解决方案 »

  1.   

    试了下 没问题if (SC_CLOSE == nID)
             {
              }
    这个语句里做啥了??
      

  2.   

    原本里面随便嵌套了一些处理,但是因为无法关闭,于是我就删掉了进行测试~~~~~~~~·还是关不掉·而我现在给你
    试了下 没问题 if (SC_CLOSE == nID) 
            { 
              } 的目的是说:我的却是在处理SC_CLOSE这个系统消息
      

  3.   

    可以直接使用来结束对话框 
    EndDialog(0); return;
    或者 PostMessage(WM_QUIT)
      

  4.   

    你点X后,程序会先去执行OnClose,然后OnClose会触发OnCancel的调用,所以如果你重写了OnClose或OnCancel,而里面什么都没做,对话框就关不掉了
      

  5.   

    CDialog::OnSysCommand(nID, lParam)这个函数对SC_CLOSE的处理不过也是调用OnClose而已。
      

  6.   

    一般为了防止esc退出,会重载OnCancel
    所以你应该在OnClose里面直接调用CDialog::OnCancel();
      

  7.   

    感谢各位大侠原因明白了。原来是大意之下,dlg中默认出现的按钮取消的ID我没有给他改变~~
    结果产生了一个OnCancel函数而我却盲然而不自知现在明白了,谢谢各位~~~~~~~~