2009-07-31 3 views
1

내 응용 프로그램의 이상한 동작이 발생했습니다. MDI 응용 프로그램에서 프레임 창을 닫고 싶습니다. 그래서 WM_SYSCOMMAND (SC_CLOSE)를 해당 창에 보냅니다. 그 후에 OnSysCommand를받습니다. 그런 다음 CMDIChildWnd :: OnSysCommand를 호출하여 처리를 진행합니다.DefWindowProc가 메시지 처리를 중단하도록하는 원인은 무엇입니까?

문제는 OnSysCommand의 기본 구현에서 OnClose를 호출하고 내 프레임이 파괴되고 때때로 그렇지 않다는 것입니다. 조사를했고 _NtUserMessageCall에 차이가있는 것으로 보입니다 (실제로이 메서드는 실패한 일부 커널 모드 함수를 호출합니다). WS_SYSCOMMAND가 _NtUserMessageCall보다 성공하면 DispatchHook을 호출하고 user32.dll 메서드가 한꺼번에 나타나며 메시지가 대상 창에 도달합니다. 실패하면 프레임 창이 닫히지 않고 OnClose가 호출되지 않습니다.

나는 이상한 행동을 일으킬 수있는 아이디어가 부족합니다. Application Verifier로 응용 프로그램을 검사했는데 모든 것이 잘된 것 같습니다. 한 가지 더, 내 응용 프로그램이 COM을 통해 실행되는 경우에만 문제가 나타납니다.

나는이 문제로 2 일 동안 싸우고 있으며 파기를 계속할 수있는 몇 가지 신선한 단서가 필요합니다.

답변

1

나는 당신의 OnSysCommand 핸들러 단지 기본 처리를 호출 가기 전에 메인 프레임 창에 WM_CLOSE 메시지를 보낼 것을 제안했다.

그러나 CMDIChildWnd :: OnSysCommand 메서드를 호출하는 것을 신경 쓰지 마십시오.

관련 문제