때에 따라서는 Dialog 창을 갑자기 종료시켜야하는 경우가 발생한다.

 

이러한 경우 여러 해결방법이 있겠지만, 그중에서 직접 찾아보고 시도해봤던, 그리고 추천하는 방법을 작성해본다.

 

OnClose()

-> 정말 프로세스 도중에 창을 닫아버린다. 따라서 메모리릭 발생

 

Exit(0)

-> 피차일반, 비정상적인 종료라면서 마찬가지로 오류 또는 메모리릭 발생

 

::PostQuitMessage(WM_QUIT)

-> 아래와 같은 경고창이 발생한다. 이말인 즉슨, 안전한 종료방법은 아니라는듯하다.

"경고: 대화 상자를 만들지 못했으므로 응용 프로그램이 예기치 않게 종료됩니다.
경고: 대화 상자에서 MFC 컨트롤을 사용하는 경우 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS를 수행할 수 없습니다."

 

::SendMessage(this->m_hWnd, WM_CLOSE, NULL, NULL) 혹은 ::SendMessage(GetSafeHwnd(), WM_CLOSE, NULL, NULL)

-> 메모리릭이 발생하지 않는다. 그리고 아무런 경고 엾이 정상적으로 종료가 된다.

 

참고 : http://egloos.zum.com/CharlesM/v/1279955

 

Posted by Tommy™
,

PreTranslateMessage() 함수 생성

 

     if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
          return TRUE;

 

추가하면 완료.

 

말그대로, 이벤트를 먼저 처리하는 구문이 바로 PreTranslateMessage() 함수인데, 여기서 키 입력 파라미터인 wParam 에서 VK_RETURN (엔터키) 와 VK_ESCAPE (Esc키)가 눌러졌을때, 걍 True로 리턴하라는 뜻. 

 

참고사이트: http://lafirr.tistory.com/20

Posted by Tommy™
,

현재 진행중에 있는 프로젝트에서 Dialog창을 모달리스로 새로 생성을 해야하는데, 포커스가 이동이 안되는것이다.

 

그러다 검색하다보니,

 

방법이 있었다.

 

기존의 모달리스 창 생성할때 Create 부분에 CWnd::GetDesktopWindow() 을 추가해주면 되는것이었다.

 

이렇게 하면 부모 다이얼로그랑 동급의 오더를 가지게 되어 각각의 포커스를 부여할 수가 있는것이었다.

 

m_pMyDlg = new m_pMyDlg;
m_pMyDlg->Create(IDD_MY_DIALOG, CWnd::GetDesktopWindow());

 

참조 : http://blog.naver.com/ice4tea/70015838748

 

 

Posted by Tommy™
,