|
한글 입력 처리가 방대하다는 의미보다는,
정확히 어떤 작업을 원하시는지를 알기가 힘들어 그 의미가 방대하다는 의미로 말씀드린 것이었습니다.
직접 한글 입력 처리를 구현 하시는 것이라면 IME 관련 루틴을 가져와 작업을 할 수도 있습니다.
흔히 게임을 만들때도 직접 한글 조합 및 처리를 다 해주어야 하기 때문에, 이런 작업에 관한
레퍼런스는 꽤 많습니다.
저는 가남사의 'Windows API 정복' 이라는 책에서 참고를 했었는데, 그 관련 소스를 올려드리니
참고해 보시기 바랍니다.
만약에 첨부드린 소스로 참고하시기가 힘드시다면, 정확히 어떤 작업을 하시는 중이시고
어떤 목적으로 하시는지 예를 좀 들어주시면, 더 큰 도움을 드릴 수 있을 것 같습니다.
cuperido
leo21c 님이 쓰신 글 :
: 답글을 잘 읽었습니다. 한글입력처리가 방대하다고 말씀하셨는데 정보를 어디서
: 얻을 수 있는지 알려주세요.
: 제가 처리하고자 하는 것은 키보드로 한글을 입력받아 화면에 출력하는 것입니다.
: 답글을 읽고 이렇게 하면 되지 않을까 생각해서 처리해 봤습니다.
:
: VCL에서 MakeObjectInstance로 서브클래싱을 할 수 있더군요. 그래서 ChildForm에 대한
: WndProc서브클래싱을 했습니다.
:
: 생성자에 이와 같이 써주고--->
: //-------------------------------------------------------------------------
: // For Window Proc
: FOriginalProc = (WNDPROC)GetWindowLong(Handle, GWL_WNDPROC);
: FObjectInstance = MakeObjectInstance(EditBoxProc);
: SetWindowLong(Handle, GWL_WNDPROC, (LONG)FObjectInstance);
: //------------------------------------------------------------------------
: 아래와 같은 함수를 만들었습니다.
: void __fastcall TChildForm::EditBoxProc(TMessage &msg)
: {
: msg.Result = 0;
: switch (msg.Msg)
: {
: case WM_SETFOCUS:
: return;
: case WM_KILLFOCUS:
: return;
: case WM_CHAR:
: case WM_IME_CHAR:
: MainMenuForm->EditProcessing(msg);
: break;
: default:
: msg.Result = CallWindowProc((FARPROC)FOriginalProc, Handle, msg.Msg,
: msg.WParam, msg.LParam);
: }
: return;
: }
: //---------------------------------------------------------------------------
: 이와 같이 처리해서 "한글", "영문"이 들어오면 MainMenuForm->EditProcessing(msg)에서
: 구분해서 화면에 Repaint()하게 만들었습니다.
: 당연히 Repaint()하기 전에 TextOut(dcDst, 0, 0, EditString.c_str(), EditString.Length());로
: 화면 (dcDst)에 뿌려주는 것입니다.
:
: 그런데 기존에 만들어 둔 KeyPress와 KeyDown이벤트에 먼저 걸리는 문제가 발생하더군요.
: Form구성은 MainForm, MainForm에서 MDI ChildForm과 MainMenuForm이 만들어 집니다.
:
: 이와 같은 방법이 아닌 다른 방법으로 한글입력을 처리할 수 있을까요?
: C++빌더에서 이벤트처리 함수들이 기본적으로 제공되잖아요. 하지만 한글(영문이외의 외국어)에
: 대한 처리방법은 알수가 없더군요.
:
: 경험이 있으신 분은 방법이나 자료/서적에 대한 조언 부탁드립니다.
: /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
:
:
:
:
: 유영인 Cuperido 님이 쓰신 글 :
: : 한글 입력 처리라는 의미가 조금 방대해서 어느 부분을 원하시는 지는 잘 모르겠습니다.
: : 우선, Key로 넘어오는 값들은 전부 키보드 값에 해당하는 값입니다. 대문자로 입력을 하든지,
: : 소문자로 입력을 하든지, 한글키로 입력을 하든지, 모든 값은 하나로 넘겨집니다.
: :
: : 다만, 한글 조합 처리를 하시려면, 이 값을 토대로 현재 커렛상태와 IME 상태를 판단하셔서
: : 조합을 시키는 그런 방법이 필요하실것 같습니다.
: :
: : 예를들어, R 을 눌렀을때, KeyPress나 KeyDown 으로 'ㄱ' 이 넘어온다든지의 작업은
: : 이런 함수 안에서는 불가능합니다.
: :
: :
: : cuperido
: :
: :
: :
: : leo21c 님이 쓰신 글 :
: : : 질문: KeyPress or KeyDown으로 한글입력을 처리할 수 있을까요?
: : :
: : : API로 처리하면 WinProc에서 Message를 확인하여 "WM_CHAR"와 "WM_IME_CHAR"를 구분하여
: : : 한글과 영문을 처리할 수 있었습니다.
: : : 그런데 C++빌더에서는 이벤트를 처리해주기 위해서 KeyDown과 KeyPress가 있잖아요.
: : : KeyPress는 WM_CHAR를 처리해 주고 KeyDown은 모든 Key이벤트를 처리해 준다고 알고 있습니다.
: : : KeyPress에서 입력받은 Key값으로는 처리가 안되는 것 같은데....
: : : 한글입력을 지정했지만 무조건 영문으로 인식하는 것 같습니다.
: : :
: : : 기본 이벤트로 한글입력을 처리할 수 있을까요?
|