Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MFC\C++;:使用PostMessage后程序出现异常(WM_CLOSE)_C++_Winapi_Visual C++_Mfc - Fatal编程技术网

C++ MFC\C++;:使用PostMessage后程序出现异常(WM_CLOSE)

C++ MFC\C++;:使用PostMessage后程序出现异常(WM_CLOSE),c++,winapi,visual-c++,mfc,C++,Winapi,Visual C++,Mfc,我正在从事一个MFC\C++SDI项目,在该项目中,我希望在计时器事件上关闭大型机类中的所有子窗口 我已经编写了一个用于计时器和关闭应用程序的代码 我使用下面的代码进行同样的操作 void CMainFrame::OnTimer(UINT_PTR nIDEvent) { LASTINPUTINFO li; li.cbSize = sizeof(LASTINPUTINFO); ::GetLastInputInfo(&li); // Calculate the

我正在从事一个
MFC\C++SDI
项目,在该项目中,我希望在计时器事件上关闭
大型机
类中的所有子窗口

我已经编写了一个用于计时器和关闭应用程序的代码

我使用下面的代码进行同样的操作

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);
}
void CMainFrame::OnTimer(UINT\u PTR nIDEvent)
{
lastinputinfoli;
li.cbSize=sizeof(LASTINPUTINFO);
::GetLastInputInfo(&li);
//以秒为单位计算经过的时间。
DWORD te=::GetTickCount();
整数经过=(te-li.dwTime)/1000;
跟踪(\u T(“\n%d”),已过;
如果(m_nAutoLogOffTime<经过)
{
开关(m_nAutoLogOffTime)
{
案例自动登录1分钟:
后消息(WM_关闭);
打破
案例自动登录3分钟:
后消息(WM_关闭);
打破
案例自动登录10分钟:
后消息(WM_关闭);
打破
}
}
CFrameWnd::OnTimer(nIDEvent);
}
但是,如果任何子窗口(如任何对话框)打开且经过的时间已结束。 然后在
PostMessage()之后用
WM\u CLOSE
调用函数。但是在关闭我的应用程序时,我在
doccore.h
上遇到了一个异常

我无法理解为什么应用程序会出现这种情况

我还尝试了退出(0)
PostQuitMessage(0)
WM_DESTROY
,但结果相同

这是一个我得到断言的函数

那么,有人能帮我吗

对不起,英语不好


提前谢谢。

这也不例外。这是一个失败的断言。它告诉您预期的情况。如果您正在寻求帮助,请发布此信息。@IInspectable我在获取此断言的位置添加了一段代码,您能帮我吗?那么,您的程序是否在
assert(pSender==NULL | | |!m_viewList.IsEmpty())的行终止或哪一行?不,断言位于第
行pos=GetFirstViewPosition()
可能建议:当对话框打开时,永远不要关闭主应用程序。在某些变量中不需要保留对话框句柄。检查主窗口是否已禁用。如果是,请确定最后一个激活的弹出窗口,并将此对话框附近的WM_发送到。重复此操作,直到主应用程序处于活动状态,并在其附近发送WM_。希望没有消息框会询问是否关闭(是/否;)