Study/C, C++ (MFC, UE)

[MFC] Dialog 기반 프로그램 enter,esc 키 처리에 관해

BlueBright 2018. 5. 15. 09:38

MFC 대화상자 기반 프로젝트를 설계할 때,

Enter, ESC 를 누르면 프로그램이 종료되는 문제가 있다.


이를 개선하기 위해서 함수 OnOK(), OnCancel()를 오버라이딩 하는 방법도 있지만,

보통 PreTranslateMessage함수를 많이 사용하는 편이다. (많이 사용하는 편인 것 같다.)


다른 블로그 글에 의하면 해당 키가 감지 되었을 때 return TRUE을 해버리면 된다고 한다.

다만 본인은 현재 채팅 프로그램을 학습 중이였기 때문에

Enter키 이벤트가 필요해서 꽤나 골치 거리였다.



http://mainia.tistory.com/599


해당 블로그 게시글에 힌트를 얻어서 엔터(VK_RETURN)를 눌렀을 경우, 포커스를 찾아서 만일 입력창에서 엔터키를 눌렀을 경우, Send 명령을 실행할 수 있도록 설정 했다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//아래 두줄은 editSendMsg 변수가 무엇인지 알리기 위해 써놓은 줄이니
//그대로 복사하면 에러가 발생합니다.
CEdit *editSendMsg;
editSendMsg = (CEdit *)GetDlgItem(IDC_EDIT_SEND);
 
BOOL CServerCppDlg::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN) //키가 눌렸을 경우
    {
        switch (pMsg->wParam)
        {
        case VK_RETURN:
            if (editSendMsg == GetFocus())
                OnBnClickedButtonSend();
        case VK_ESCAPE:
            return TRUE;
 
        default:
            break;
        }
    }
 
    return CDialogEx::PreTranslateMessage(pMsg);
}
 
cs
















'Study > C, C++ (MFC, UE)' 카테고리의 다른 글

[C++, MFC] 형변환 연구  (0) 2018.05.31
[C++] Vector<String> 문자열 소트  (0) 2018.05.17
OpenGL 함수 (진행 중.....)  (0) 2018.05.10
opengl.dll missing error 해결기  (0) 2018.05.09
[C++, MFC] Radio button 그룹화  (2) 2018.05.03