2012-10-23 4 views
3

내 CDialog 기반 응용 프로그램을 닫으려고합니다. CWnd :: OnClose()를 호출하고 디버거가 Windows 시스템 파일로 이동합니다. 디버거 출력 창에서 이러한 루핑 줄을 무기한 얻을.MFC 대화 상자 응용 프로그램이 닫히지 않습니다.

스레드 '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를 열 수 없습니다

어떤 아이디어가 내가 부러 졌는지 또는 어떻게 추적해야하는지? 감사합니다. James

편집 대화 상자의 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 : CWnd :: OnClose()를 this-> EndDialog (0)로 바꾸면 문제를 해결할 수 있지만 걱정되는 것 같습니다.

답변

1

id가 버튼에 혼란을주었습니다. 즉, 핸들러가 호출되어 메서드 실행을 완료하는 데 오랜 시간이 걸렸습니다.

모든 것을 수정했습니다. 그래도 도와 ​​줘서 고마워.

1

http://msdn.microsoft.com/en-us/library/866bc849(v=vs.80).aspx의 설명서에서 CWnd :: OnClose를 확인해야합니다. 발생하는 이벤트에 응답하여 호출되는 함수임을 알 수 있습니다. 수신 WM_CLOSE 메시지가 나타나서 창이 닫아야 함을 나타냅니다. 단순히 호출하면 창을 닫을 수 없습니다.

적절한 반환 코드 http://msdn.microsoft.com/en-us/library/wddd3ztw%28v=vs.80%29.aspx을 사용하여 EndDialog를 호출해야합니다.

관련 문제