簡體   English   中英

MFC對話框應用程序未關閉

[英]MFC dialog application not closing

我正在嘗試關閉基於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()似乎可以解決問題,但這很令人擔憂。

您應該在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。

真正的問題是按鈕上的id有些混亂,這意味着正在調用一個處理程序,導致一個方法運行需要很長時間才能完成。

修正了這一切,一切正常。 謝謝你的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM