2014-06-20 6 views
0

CFormView에서 파생 된 자식 창이 있습니다. OnCreate() 함수의 특정 조건에서이 창을 닫고 싶습니다. 윈도우가 닫혀, 두 경우 모두에서자식 창을 닫을 때 MessageBox 피하기

int CFilterWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    if (CFormView::OnCreate(lpCreateStruct) == -1) 
    return -1; 

//Trial-1 
if (!IsInitialized()) 
{ 
    DestroyWindow(); 
    return 0; 
} 
//Trial-2 
if (!IsInitialized()) 
{ 
    return -1; 
} 

return 0; 
} 

하지만 내 시스템은 내가이 메시지가 나타나지 않도록하려면 어떻게해야

"Failed to create empty document."를 반환

나는이 옵션을 시도?

+1

Debug + Break All을 사용하고 호출 스택 디버거 창에서 어떻게 얻었는지 확인하십시오. 코드에서 doc/view 프로그래밍 결함입니다. 문서를 만들었지 만 MFC에서보기를 만들려고하면 "볼 수 없다"고했습니다. 문서를 먼저 만들지 말고 더 빨리이 작업을 중지해야합니다. –

+0

그럼 예상 할 수있는 것을 말해 줄 수 있습니까? 문서를 만든 다음보기를 만들지 만 특정 조건으로 인해 OnCreate() 함수 내에서 같은보기를 닫습니다. – Nipun

답변

0

이것은 완전히 정상적인 동작입니다.

문서, 프레임 및보기가 한 번에 생성됩니다. 먼저 문서가 프레임보다 안쪽 뷰보다 먼저 생성됩니다. 작업 중 하나가 실패하면 다른 작업도 롤백되고 실패합니다.

따라서 MDI OnFileNew의 경우 템플릿에서 OpenDocumentFile을 호출합니다. 이 함수는 새 CDocument를 만들고 새 프레임 창을 만듭니다. 프레임 윈도우가 뷰를 생성합니다. 이것은 코드로 인해 실패합니다.

CreateNewFrame이 실패하기 때문에 오류 메시지는 CMultiDocTemplate :: OpenDocumentFile에서 나옵니다.

MFC가 창을 만들고 OnInitialUpdate에서보기를 파괴하도록하십시오. 이 메시지가 없으면 작동합니다.

+0

OnIniialUpdate 함수에서 동일한 작업을 수행 한 후에 크래시가 발생했습니다. 충돌이 무효입니다. CFrameWnd :: InitialUpdateFrame (CDocument * pDoc, BOOL bMakeVisible) InInitialUpdate에 대한 WM_INITIALUPDATE 메시지를 trigerrs하고 나중에 OnActivateFrame() 함수를 호출합니다. 나는 창을 파괴 할 때 DestroyWindow() 다음에 쓰레기 인 뷰 포인터에 대해 일부 작업을 시도합니다. – Nipun

+0

CloseWindow()와 WM_DESTROY 메시지로 작업을 시도했지만 동일한 결과 ... 크래시 – Nipun

+0

보기보다 개인 WM_APP 메시지를 게시하는 것보다 더 많은 기회를 볼 수 없습니다. ist를 사용할 때 DestroyWindw를 사용하십시오. WM_DESTROY를 메시지로 게시하거나 보내지 마십시오. 그것은 내부입니다. – xMRi