代码:
void CDVDOpenDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
if(nID==SC_MINIMIZE)
OnMin();
else
    CDialog::OnSysCommand(nID, lParam);
}
}
明明没处理SC_CLOSE 吗!

解决方案 »

  1.   

    应该不是这里的问题,你在OnMin上设置断点调试,关闭窗口看是否会执行到断点上。
      

  2.   

    在Shell_NotifyIcon所有被调用的地方都加断点,看看啥时候它被调用
      

  3.   

    我是这么实现的:void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam) 
    { //当最小化窗口时,隐藏在任务栏托盘中
    if( (nID & 0xFFF0) == SC_MINIMIZE)
    {
    ShowWindow(SW_HIDE);
    return;
    } CFrameWnd::OnSysCommand(nID, lParam);
    }
      

  4.   


    只在OnMin设一个会的
     奇怪的是你在OnMin和    CDialog::OnSysCommand(nID, lParam); 都设断点是点插号会运行CDialog::……无果!
      

  5.   

    在OnMin上设置断点,执行到断点时根据调用堆栈来查是从哪里调用进来的。
      

  6.   

    IDM_ABOUTBOX=0x10
    SC_MINIMIZE=0xF020
    SC_CLOSE=0xF060
    nID&0xFFF0 后都等于0
    因此第一个分支总被调用?你是不是每次都看到about?
      

  7.   


    //加上看看你点关闭的时候会不会出现对话框??
     if( (nID & 0xFFF0) == SC_CLOSE)
        {
           MessageBox("ok");
            return;
        }