2014-03-24 3 views
0

나는 200 줄 이상의 OnCreate 기능을 가진 오래된 MFC 응용 프로그램을 가지고 있습니다.CMainFrame의 메시지 상자 OnCreate

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
... 
PostMessage(LOAD_IMAGES,0,0); 
... 
ValidatePermissions(); 
... 
} 

LOAD_IMAGES

ValidatePermissions 함수는 팝업 ... 기본적으로 새로운 CDocument을 만들려고 .. 그 핸들러 마지막 세션에서 저장되지 않은 있던 이미지를로드하려고 사용자 메시지입니다 모달 메시지 상자가 누락 된 권한을 찾으면 ..

모달 메시지 상자가 나타나면 LOAD_IMAGES 처리기가 작동 할 때 충돌이 발생합니다 (CDocument를 만들 수 없기 때문에 CMainFrame이 아직 생성되지 않았습니다.)

어떻게 처리해야합니까? OnCreate에 모달 메시지 박스가 없도록 제안하는 문서가 있습니까?

답변

1

ValidatePermissions에 대한 호출을 LOAD_IMAGES의 메시지 처리기로 이동해보십시오. 메시지 상자가 메시지를 보내 게하기 전에 창을 완전히 만들어야합니다.

+0

그래서 기본적으로 PostMessage 호출에서 모달 메시지 상자가 실행되도록하는 모든 항목을 이동해야합니까? – manimatters

+0

메시지 상자에 메시지가 펌프로 전달되어 다른 메시지 처리기에있을 때 MFC 메시지 처리기를 호출하는 등의 이유로 wndproc을 다시 입력 할 수 있습니다. PostMessage가 문제의 원인이 아닙니다. 메시지를 보내는 동안 많은 메시지가 다시 입력 될 수 있습니다 상자. –

+0

그래, 기본적으로 메시지 펌핑이 계속되면 위험 할 수 있습니다. postmessage 호출에서 messagebox를 호출하면 메시지 상자 펌프가 시작되기 전에 OnCreate 메시지 처리기가 완료 될 수 있습니다. – manimatters