hyeonk lab

블로그 이미지

hyeonk

hello world! hyeonk lab.

BOOL PreTranslateMessage(MSG* pMsg)

mfc & winAPI 2014. 3. 21. 10:08

- 키 입력 처리를 할 수 있는 함수.

- 보통 엔터키나 ESC키를 눌렀을때 자동으로 OnOK()나 OnCancel()로 처리 되지만,

  그전에 키 입력메세지를 사용자 정의로 처리하고 싶으면 이 함수를 쓰면 된다.


[-] Collapse

BOOL PreTranslateMessage(MSG* pMsg)
{
    if( pMsg->message == WM_KEYDOWN)    //키 다운 메세지
    {
        if( pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)    //ESC or Enter 키
                         return FALSE;                    //처리 부분
    }
    return CDialog::PreTranslateMessage(pMsg);
}


키 다운을 처리하려면 보통 위와 같은 방법으로 처리한다.

해당되는 키 값을 조건문에 넣고, 해야할 처리를 코딩 해주면 된다.


* 부모 다이얼로그에서 탭컨트롤을 이용한 자식 다이얼로그의 키입력 처리를 할때도 사용하면 된다.

부모 다이얼로그에서 탭컨트롤에 있는 자식 다이얼로그가 3개가 있다면,

해당 자식 다이얼로그에 포커스를 두고 엔터키나 ESC를 누르면, OnOk()나 OnCancel()로 메세지가 가버려서, 

다이얼로그가 사라질 수가 있다. 그러면 탭 이동을 한뒤 다시 탭을 클릭해야 해당 다이얼로그가 나타나게 된다.


자, 그러면 아래와 같이 자식 다이얼로그 클래스에서 PreTranslateMessage()를 재정의 한 후

[-] Collapse

BOOL PreTranslateMessage(MSG* pMsg)
{
      return FALSE; //처리 부분
// return CDialog::PreTranslateMessage(pMsg);
}

return FALSE; 로 처리를 해주면 된다.


키 입력 메세지가 자식 다이얼로그에서 최종적으로 처리되기 이전에, PreTranslateMessage() 함수에서 처리를 할 수 있기 때문에

PreTranslateMessage()는 return TRUE; 가 되면, 더이상 메세지 처리가 되지 않고, 거기서 메세지 처리가 종결된다.

반면에 return FALSE; 가 되면, 자식 다이얼로그에서는 더이상 메세지 처리가 되지않고

부모 다이얼로그로 메세지가 넘어간다.

그러면, 부모 다이얼로그의 PreTranslateMessage() 함수나, OnOk(), OnCancel() 함수로 흐름이 이어지게 되어

부모 다이얼로그의 키 입력 처리대로 흘러간다.


부모 다이얼로그에서 탭컨트롤에 자식 다이얼로그를 붙일 경우,

이렇게 처리를 해주면, 자식 다이얼로그에서 ESC나 엔터키를 눌러도 자식 다이얼로그가 사라지거나 하는것을 방지하고, 부모 다이얼로그의 루틴대로 처리할 수 있다.

저작자표시 (새창열림)

'mfc & winAPI' 카테고리의 다른 글

[강좌/메시지] WM_NOTIFY 메시지에 대해서...(ON_NOTIFY) - 1편  (0) 2015.08.19
#import msado15.dll이 소스에서 OS등에 따라 컴파일이 되지 않을 때  (0) 2014.04.11
분할 윈도우 중 하나에 접근하는 방법  (0) 2014.02.10
[MFC] SendMessage  (0) 2014.01.07
어플리케이션(MFC)에서 스레드 사용 및 주의사항 (필독!!)  (0) 2014.01.07
Posted by hyeonk
블로그 이미지

hello world! hyeonk lab.

by hyeonk

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

글 보관함

«   2025/09   »
일 월 화 수 목 금 토
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 26 27
28 29 30

링크

카테고리

전체 (44)
ios (1)
mfc & winAPI (17)
c & c++ (4)
java (1)
eclipse (1)
visual_studio (2)
javascript (3)
asp (1)
oracle (3)
개발이야기 (5)
윈도우 일반 (2)
etc (2)
reference (2)
personal_reference (0)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
hyeonk's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

hyeonk lab

hello world! hyeonk lab.

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 전체 (44)
    • ios (1)
    • mfc & winAPI (17)
    • c & c++ (4)
    • java (1)
    • eclipse (1)
    • visual_studio (2)
    • javascript (3)
    • asp (1)
    • oracle (3)
    • 개발이야기 (5)
    • 윈도우 일반 (2)
    • etc (2)
    • reference (2)
    • personal_reference (0)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바