728x90
MFC Dialog 엔터(Enter) 혹은 ESC 입력 시, 프로그램이 종료되지 않게 혹은 다른 버튼 수행하도록 하기
이 포스트는 이전 블로그에서 이전된 포스트입니다.

 

Dialog에서 Enter나 ESC 입력 시, 프로그램이 종료된다.

(사전 가정 : 기본 제공되는 OK 버튼과 Cancel 버튼을 제거하거나 함수 내용을 모두 주석처리한다.)
 

이 경우 동작 수행을 변경할 수 있다.

 

1. Dialog의 클래스 마법사 실행

 

2. 가상함수 탭에서 PreTranslateMessage 추가

 

 

3. 연결된 소스파일로 이동한 후, 아래를 참고하여 4~10행을 추가합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
BOOL C진수변환기Dlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
    if (pMsg->message == WM_KEYDOWN)
    {
        if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)             
        {   // 위 VK_RETURN은 Enter, VK_ESCAPE는 ESC을 의미함. 필요시 하나만 사용.
            return true;
        }
    }
 
    return CDialogEx::PreTranslateMessage(pMsg);
}
cs

​ 

반응형

 

추가적으로 특정 버튼을 수행하려고 한다면

8행의 return true; 위에 버튼 실행을 위한 함수를 호출합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
BOOL C진수변환기Dlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
    if (pMsg->message == WM_KEYDOWN)
    {
        if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)             
        {   // 위 VK_RETURN은 Enter, VK_ESCAPE는 ESC을 의미함. 필요시 하나만 사용.
            OnBnClickedButtonConvert();
            return true;
        }
    }
 
    return CDialogEx::PreTranslateMessage(pMsg);
}
cs

 

.

728x90

+ Recent posts