2008년 07월 23일
모달리스 다이얼로그 Enter, ESC 키 무시 방법과 소멸 방법
1. Enter, ESC 키 무시 방법

모달리스 다이얼로그를 만들고 이 ESC,ENTER 키를 입력하면 다이얼로그가 사라지게 됩니다. 그렇다고 꼭 이 두 키를 무시해야 한다는 건 아니고 경우에 따라 무시를 해도 되고 다른 동작을 하게해도 됩니다. 이는 개발자 마음!!
모달리스 다이얼로그 클래스에서 PreTranslateMessage()를 아래와 같이 오버라이딩 해주면 됩니다.

/*
     ESC, Enter key를 무시한다.
*/
BOOL CProcessADlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class
    switch(pMsg->message)
    {
    case WM_KEYDOWN:
        {
            switch(pMsg->wParam)
            {
            case VK_ESCAPE:
            case VK_RETURN:
                return TRUE;
            }
        }
    }
    return CDialog::PreTranslateMessage(pMsg);
}

 
2. 소멸 방법

모달리스 다이얼로그를 소멸하려면 두 가지 측면에서 생각해야 합니다. 하나는 모달리스 다이얼로그를 생성하는 부모 윈도우 객체이고 하나는 모달리스 다이얼로그 자신입니다.  부모 윈도우 객체에서는 모달리스 다이얼로그를 생성할 때 모달리스 다이얼로그 객체 변수를 정한 후 메모리 할당을 하고 Create()함수를 호출하여 생성하게 됩니다. 그렇다면 모달리스 다이얼로그가 파괴 될 때 부모 윈도우가 이를 알 수 있어야 메모리 해제를 제대로 해 줄 수 있습니다. 제가 사용한 방식은 모달리스 다이얼로그 객체에서 자기 자신의 메모리를 해제하고 부모 윈도우에서는 모달리스 다이얼로그 객체변수에 NULL 포인터를 전달하는 방식을 사용했습니다. 이렇게 하기 위해서 모달리스 다이얼로그의 PostNcDestroy()가 호출 되는 시점에서 부모 윈도우에게 사용자 정의 메시지(저는 WM_DESTROY_DLG라고 정했습니다.)를 하나 정해서 SendMessage함수를 통해서 메시지를 전달해 주고 부모 윈도우에서는 이 메시지를 처리합니다. 그리고 모달리스 다이얼로그에서 자기 자신의 메모리를 해제 합니다. 이 과정에 대해서는 예제 소스를 함께 첩부해 놓았습니다. 말로 잘 설명해보려고 했는데 글 재주가 없어서;;


※ 위 글에 대한 잘못된 부분이나 궁금하신 부분에 대한 피드백은 언제나 환영입니다 ~ 물론, 퍼가신다면 영광이구요. 우리나라의 모든 개발자 분들께서 바쁘시지만 서로 자신의 귀중한 경험과 지식을 공유해서 함께 발전해 나갈 수 있었으면 합니다 ^^

Dialog.zip


※ 참고 사이트 및 문서 

    1. Visual C++.NET 실전 프로그래밍 (가메 출판사)
    2. http://myhome.hanafos.com/~kukdas/doc/mfc/tip8.html

by greenfrog | 2008/07/23 08:58 | C++ / WIN32 / MFC | 트랙백 | 덧글(0)
트랙백 주소 : http://greenfrog7.egloos.com/tb/613282
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>