MFC对话框应用程序未关闭

时间:2012-10-23 16:00:52

标签: c++ mfc

我正在尝试关闭基于CDialog的应用程序。我调用CWnd :: OnClose(),然后调试器进入Windows系统文件。在调试器输出窗口中,我无限期地获得这些循环线。

线程'Win32 Thread'(0x1040)已退出,代码为0(0x0)。 线程'Win32 Thread'(0x2fa4)已退出代码0(0x0)。 线程'Win32 Thread'(0x1ca0)已退出,代码为0(0x0)。 'LifescanDatabaseApplication.exe':卸载'C:\ Windows \ SysWOW64 \ davclnt.dll' 'LifescanDatabaseApplication.exe':卸载'C:\ Windows \ SysWOW64 \ davhlpr.dll' 'LifescanDatabaseApplication.exe':已加载'C:\ Windows \ SysWOW64 \ davclnt.dll',无法找到或打开PDB文件 'LifescanDatabaseApplication.exe':已加载'C:\ Windows \ SysWOW64 \ davhlpr.dll',无法找到或打开PDB文件

我有什么想法,或者我应该如何追踪它? 谢谢, 詹姆斯

编辑 此处显示对话框的函数OnClose();

void CApplicationDlg::OnClose()
{
    UpdateData(TRUE);
    if(AfxMessageBox(_T("Are you sure you want to close? If so, no more updates will be issued"),MB_YESNO)==IDYES)
    {
    Logger * instance = Logger::Instance();
    if(instance!=nullptr)
    {
      instance->writeToLogFile("Application shutdown.");
    }
        CWnd::OnClose();
    }
}

我通过Cwnd :: OnClose()命令通过调试器跟踪了这一点。问题是,代码没有回到调用对话框来运行EndDialog的部分。我想我已经改变了阻止这种工作的对话框代码中其他地方的东西。

编辑2: 用this-> EndDialog(0)替换CWnd :: OnClose()似乎可以解决问题,但这很令人担忧。

2 个答案:

答案 0 :(得分:1)

您应该在http://msdn.microsoft.com/en-us/library/866bc849(v=vs.80).aspx的文档中查看CWnd :: OnClose。您将看到它是响应事件发生而调用的函数:窗口 RECEIVING WM_CLOSE消息,指示窗口应该关闭。简单地调用它就不会关闭窗口。

您应该使用适当的返回码http://msdn.microsoft.com/en-us/library/wddd3ztw%28v=vs.80%29.aspx来调用EndDialog。

答案 1 :(得分:1)

真正的问题是按钮上的id有些混乱,这意味着正在调用一个处理程序导致一个方法运行需要很长时间才能完成。

修正了一切正常。谢谢你的帮助