|
한글 코드가 꼭 따로 아스키 코드로 있는것은 아닙니다. 예를 들어, '하' 의 경우, KeyPress 가 2번 작동되겠지만, '늘' 의 경우에는 3번 작동됩니다.
따라서, 석구님께서 말씀하신대로 한글 코드가 2Byte 인것과는 KeyPress와는 상관이 없습니다. KeyPress에서는 눌려진 키 값을 반환해 줍니다. 이것은 편하게 그냥 키보드의 위치 값과 똑같다고 생각하시면 됩니다.
따라서, 'a' 와 'ㅁ' 의 경우 똑같은 아스키 값을 넘겨주게 됩니다. 다른 처리를 원하신다면, 한글 상태인지 영문 상태인지 알아본 다음, 처리를 따로 해주셔야 합니다
한글 영문 상태를 강제로 치환하는 방법은, 아래와 같이 처리하시면 됩니다.
HIMC hiMode = ImmGetContext(Application->Handle);
// 영문 자판
ImmSetConversionStatus(hiMode, IME_CMODE_ALPHANUMERIC, IME_CMODE_ALPHANUMERIC);
// 한글 자판
ImmSetConversionStatus(hiMode, IME_CMODE_HANGEUL, IME_CMODE_HANGEUL);
홍석구 님이 쓰신 글 :
: memo 컴포넌트에서 keypress 이벤트 등록했습니다.
: char로 넘어오는 키값을 한글에 대해서 읽을수 있나요.
: Q&A 찾아보고 Tip'N Tricks을 찾아봐도 keypress 이벤트에서
: 한글코드를 읽어오는 것은 못찾겠습니다.
: Tip'N Tricks에 임프님이 쓴글도 char [] 배열에 한글코드가 들어가 있는
: 데서 시작해서 sendmessage 하는 것인데 한글코드 자체를 읽어오지 못하니
:
: 아시는 분있으시면 꼭 답변 부탁합니다.
: c++builder 5.0
: windows xp 에서 개발하고 있습니다.
:
: void __fastcall TForm1::memoKeyKeyPress(TObject *Sender, char &Key)
: {
: // Key 영문에 대해서는 작동하지만 한글코드는 알아내지 못하고 있습니다.
: // 한글코드는 2byte인데 파라미터는 char로 넘어옵니다.
: // 해결방법을 아시는 분이 계십니까
: }
:
: 감사합니다.
|