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()가
호출 된다.
'개발 관련 > Windows 개발' 카테고리의 다른 글
윈도우 핸들로 컨트롤(Button, Edit, Combo.. ) 구분하는 방법 (0) | 2013.01.12 |
---|---|
PreTranslateMessage() 처리 방식 문제 (0) | 2013.01.08 |
Create()를 사용해서 윈도우를 생성할 때 WS_POPUP 문제 (0) | 2013.01.03 |
다이얼로그 실행시 작업표시줄에 나타나지 않는 문제 (0) | 2013.01.02 |
Editbox 안에 spin control 넣기 (0) | 2012.10.11 |
댓글 로드 중…