자료 저장소


  • 상수값
  1. WM_KEYDOWN                        &H0100
    WM_KEYUP                          &H0101
    WM_CHAR                           &H0102
    WM_IME_STARTCOMPOSITION           &H010D
    WM_IME_COMPOSITION                &H010F
    WM_IME_ENDCOMPOSITION             &H010E
    WM_IME_SETCONTEXT                 &H0281
    WM_IME_NOTIFY                     &H0282
    WM_IME_CONTROL                    &H0283
    WM_IME_COMPOSITIONFULL            &H0284
    WM_IME_SELECT                     &H0285
    WM_IME_CHAR                       &H0286
    WM_IME_KEYDOWN                    &H0290
    WM_IME_KEYUP                      &H0291
    WM_IME_REPORT                     &H0280
    WM_IME_REQUEST                    &H0288


  • 각 상수의 의미


WM_KEYDOWN:

키가 눌릴 때 발생한다.

한글 입력 중에는 wParam에 229(콘트롤의 "KeyDown"이벤트와 같음)를, lParam 에 키코드와 다른 정보를 함께 반환한다.
lParam 값을 API 함수인 "MapVirtualKey" 를 사용하여 한글 입력 중에 눌린 키를 알아낼 수 있다.
한글이 아닐 경우에는 wParam 에 콘트롤의 "KeyDown" 이벤트에서 반환하는 "KeyCode 와 같은 값을 반환한다.(이 때도 lParam 에 같은 값이 반환됨)


WM_KEYUP:

콘트롤의 "KeyUp" 이벤트와 같다.


WM_CHAR:

콘트롤의 "KeyPress" 이벤트와 같으나 한글의 경우에는 한글의 바이트만 반환한다.


WM_IME_STARTCOMPOSITION :

한글을 처음 입력할 때 발생한다.
영문 입력 후 또는 수자 입력 후 한글 키를 누르면 단 한번만 발생한다.
예) "123" 을 입력하다가 "ㄱ" 을 누르면 발생 (WM_IME_ENDCOMPOSITION 발생 후 한글 입력시 발생)


WM_IME_COMPOSITION:

한글 입력 중에 발생한다 (한글을 합성중이라는 의미 임)
WM_IME_STARTCOMPOSITION 가 발생한 후, 한글 키를 누를 때 마다 발생하며 wParam과 lParam에 부가적인 정보가 반환 된다.
wParam : 합성 중인 한글에 대한 ASCII Code가 반환된다.
lParam : 반환된 wParam가 합성중인 글자 인지 완성된 글자인지를 반환한다.
값 의미
&H6018 : 반환된 wParam가 합성중인 글자임
&H800 : 반환된 wParam가 완성된 글자임


WM_IME_ENDCOMPOSITION :

한글 입력을 종료할 때 발생한다.
한글 입력 중 한글키가 아닌 키를 누를 때(숫자키, Enter키, 한영 변환키, 방향키 등), 마우스로 클릭하거나, 포거스를 잃을 때 발생한다.(즉 한글 입력 중에는 검정 상자가 생기는 데, 그 검정 상자가 없어질 때)


WM_IME_CHAR:

완성된 한글에 대한 ASCII값을 반환한다.
WM_IME_COMPOSITION 발생 후(lParam 값이 &H800일 때) 발생한다.
위에서 설명한 바와 같이 한글의 경우 WM_CHAR가 한글의 첫바이트만 반환하기 때문에 완성된 한글만을 알아내기 위해서는 이 메세지를 사용해야 한다.(실제로는 WM_IME_COMPOSITION 메세지를 사용하기 때문에 별로 사용하지 않음)


WM_IME_KEYDOWN:

한글 입력중 한글키가 아닌 키를 누를 경우 그 키값을 반환한다.
WM_IME_ENDCOMPOSITION 메세지 발생 후에(한글 입력을 종료하고)발생한다.


그 외의 메세지들은 본인도 내용을 충분히 모르고 있으며 실제로 사용할 필요도 없었다. 따라서 어렴풋이 내용을 이해는 하고 있으나 여기서 설명을 하지 않는다.
아래 내용은 TextBox를 후킹하여 한글을 입력할 때 발생하는 메세지와 반환 되는 wParam, lParam 값들이다. 중급이상의 실력이 있는 분이라면 충분히 이해할 수 있을 것이라 믿는다.



  • "가나다"를 입력하고 Enter를 쳤을 경우 발생하는 메세지


메세지                    wParam         lParam

========================= ============== =======


입력대상이 포커스를 받았을 때:

WM_IME_SETCONTEXT         1              C000000F
WM_IME_NOTIFY             10             0
WM_IME_NOTIFY             11             0
WM_IME_NOTIFY             11             0


ㄱ:

WM_KEYDOWN                229            130001
WM_IME_STARTCOMPOSITION   0              0
WM_IME_NOTIFY             11             0
WM_IME_COMPOSITION        42145(ㄱ)      6018: 합성중인 글씨임을 의미함
WM_KEYUP                  82(R)          C0130001


ㅏ:

WM_KEYDOWN                229            250001
WM_IME_NOTIFY             11             0
WM_IME_COMPOSITION        45217(가)      6018
WM_KEYUP                  75(K)          C0250001


ㄴ:

WM_KEYDOWN                229            1F0001
WM_IME_NOTIFY             11             0
WM_IME_COMPOSITION        45219(간)      6018
WM_KEYUP                  83(S)          C01F0001


ㅏ:

WM_KEYDOWN                229            250001
WM_IME_CHAR               45217(가)      1
WM_IME_COMPOSITION        45217(가)      800: 완성된 한글
WM_IME_COMPOSITION        45994(나)      6018: 합성중인 한글
WM_IME_NOTIFY             11             0
WM_CHAR                   176            1 : wParam(176) : 한글의 첫 바이트
WM_IME_NOTIFY             11             0
WM_IME_COMPOSITION        45994(나)      6018
WM_KEYUP                  75(K)          C0250001


ㄷ:

WM_KEYDOWN                229            120001
WM_IME_NOTIFY             11             0
WM_IME_COMPOSITION        45998(낟)      6018
WM_KEYUP                  69(E)          C0120001


ㅏ:

WM_KEYDOWN                229            250001
WM_IME_CHAR               45994(나)      1
WM_IME_COMPOSITION        45994(나)      800
WM_IME_COMPOSITION        46297(다)      6018
WM_IME_NOTIFY             11             0
WM_CHAR                   179            1
WM_IME_NOTIFY             11             0
WM_IME_COMPOSITION        46297(다)      6018
WM_KEYUP                  75(K)          C0250001


Enter:

WM_KEYDOWN                229            1C0001
WM_IME_ENDCOMPOSITION     0              0
WM_IME_CHAR               46297(다)      1
WM_IME_COMPOSITION        46297(다)      800
WM_IME_KEYDOWN            13             1C0001
WM_IME_NOTIFY             11             0
WM_CHAR                   180            1
WM_KEYDOWN                13             1C0001
WM_CHAR                   13             1C0001
WM_KEYUP                  13             C01C0001
WM_KEYUP                  229            80000001
WM_IME_SETCONTEXT         0              C000000F


출처 : http://longjourney.springnote.com/pages/1829806


'프로그래밍 > MFC' 카테고리의 다른 글

MFC :: Tip 1  (0) 2011.09.13
MFC :: 키보드 입력 관련  (0) 2011.09.12
MFC Debug Assertion Failed Error : winocc.cpp Line 331  (0) 2011.09.12
MFC :: MFC 에서 RTTI 구현 원리  (0) 2011.08.28
MFC :: ASSERT_VALID 매크로  (0) 2011.08.28
댓글 로드 중…

최근에 게시된 글