(펌) Modeless dialog 동적 생성 후 삭제시 메모리 해제 문제

2020. 6. 9. 14:34IT-개발/winapi 및 MFC

반응형

옮겨다 놓습니다.

 

modeless dialog 생성 후 삭제 시 내부적으로 자신을 삭제하지 않을 경우 GDI 객체가 소멸되지 않는 문제가 있다.

일반적으로 modeless dialog를 닫게 되면 PostNcDestroy가 호출되지 않아서 직접 PostNcDestory 메시지를 보내줘서 호출해야 한다. PostNcDestroy 내부에서는 자신을 delete 하는 코드가 있어야 정상적으로 메모리가 해제된다.

따라서 아래와 같이 해결할 수 있다.

.h

virtual void PostNcDestroy();

.cpp

void TestDlg::PostNcDestroy() { delete this; CDialogEx::PostNcDestroy(); }

PostNcDestroy()를 virtual로 override 해놓은 다음 외부에서 해당 dialog에 DestroyWindow를 호출한다면
CWnd의 OnNcDestroy()가 호출되면서 내부에서 PostNcDestroy()를 호출하기 때문에 virtual로 선언된 PostNcDestroy()가
호출 된다.



출처: https://ymcoder.tistory.com/247 [자료 저장소]