如何关闭应用程序,包括所有打开的子窗口,MFC

时间:2014-01-14 12:44:43

标签: c++ mfc

我开发了一个应用程序,在用户使用鼠标和键盘完成任何移动的一段时间后关闭。当应用程序的主屏幕打开时,程序正常工作,程序没有任何异常退出。在一个场景中,我的主屏幕打开,在主屏幕上点击按钮,另一个对话框打开,用户没有从键盘或鼠标输入,在这种情况下,应用程序关闭,异常。这是代码。

void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
    LASTINPUTINFO li;
    li.cbSize = sizeof(LASTINPUTINFO);
    ::GetLastInputInfo(&li);
    // Calculate the time elapsed in seconds.
    DWORD te = ::GetTickCount();
    int elapsed = (te - li.dwTime) / 1000;
    TRACE(_T("\n%d"),elapsed);

    if(m_nAutoLogOffTime < elapsed)
    {
        switch (m_nAutoLogOffTime)
        {
        case AUTO_LOGOF_1MIN:
            PostMessage(WM_CLOSE);          
            break;
        case AUTO_LOGOF_3MIN:
            PostMessage(WM_CLOSE);
            break;
        case AUTO_LOGOF_10MIN:
            PostMessage(WM_CLOSE);
            break;
        }

    }


    CFrameWnd::OnTimer(nIDEvent);
}

所以,如果我在与MainFrame不同的窗口中,并且如果PostMessage(WM_CLOSE)被调用,那么它会给出异常。即使另一个对话框打开,我也可以毫无例外地关闭应用程序。 请帮我急。谢谢。 doccore.h中出现错误 请检查图像 enter image description here

1 个答案:

答案 0 :(得分:1)

ASSERT( AfxGetMainWnd()!=NULL );
AfxGetMainWnd()->SendMessage(WM_CLOSE);