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

标签 c++ mfc

我开发了一个应用程序,当用户使用鼠标和键盘没有做任何 Action 时,该应用程序会在一定时间后关闭。当我的应用程序主屏幕打开时,程序运行正常,程序无一异常(exception)地退出。在我的主屏幕打开并且单击主屏幕中的按钮的情况下,另一个对话框打开,并且用户没有从键盘或鼠标提供任何输入,在这种情况下应用程序关闭异常。这是代码。

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) 则它会给出异常。所以我可以无一异常(exception)地关闭应用程序吗,即使另一个对话框是打开的。 请帮我解决紧急问题。提前致谢。 错误出现在 doccore.h 请检查图像 enter image description here

最佳答案

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

关于c++ - 如何关闭应用程序,包括所有打开的子窗口,MFC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21113884/

相关文章:

c++ - 如何为特殊情况定义迭代器,以便使用 auto 关键字在 for 循环中使用它

c++ - 我应该使用 shared_ptr 还是返回 unique_ptr.get()?

c++ - 如何使用宏跟踪 MFC 序列化调用

c++ - 使用 MFC 原语为 SQLite 创建 SQL 查询

winapi - 如何在 CWnd 中处理 wm_print 消息(使用 MFC)?

c++ - MFC CDialog::创建失败

c++ - 通过 winsock 发送压缩字符串

c++ - 打印到 Visual Studio 中的输出窗口

c++ - 正确关闭 WinAPI HANDLEs(避免重复关闭)

c++ - 如何在 Visual Studio 2017 中创建 Visual C++ MFC 控制台项目