MFC 对话框应用程序未关闭

Posted

技术标签:

【中文标题】MFC 对话框应用程序未关闭【英文标题】:MFC dialog application not closing 【发布时间】:2012-10-23 16:00:51 【问题描述】:

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

线程“Win32 线程”(0x1040) 已退出,代码为 0 (0x0)。 线程“Win32 线程”(0x2fa4) 已退出,代码为 0 (0x0)。 线程“Win32 线程”(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() 似乎可以解决问题,但这令人担忧。

【问题讨论】:

【参考方案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。

【讨论】:

【参考方案2】:

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

解决了这个问题,一切正常。不过感谢您的帮助

【讨论】:

以上是关于MFC 对话框应用程序未关闭的主要内容,如果未能解决你的问题,请参考以下文章

来自 MFC 对话框中使用的托管 C# 用户控件的未处理异常

如何在 Visual Studio 中禁用基于对话框的 MFC 应用程序的自动关闭?

MFC 关闭窗口用哪个函数?

如何“正确关闭 MFC 无模式对话框并修复资源泄漏”

MFC 应用程序在启动时关闭

MFC编程中,程序运行,若关闭对话框 ,程序会崩溃.