C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[36663] Re:[재질문]한글입력처리를 이렇게 하면 안될까요?
cuperido [cuperido] 1828 읽음    2004-08-09 18:33
한글 입력 처리가 방대하다는 의미보다는,
정확히 어떤 작업을 원하시는지를 알기가 힘들어 그 의미가 방대하다는 의미로 말씀드린 것이었습니다.

직접 한글 입력 처리를 구현 하시는 것이라면 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값으로는 처리가 안되는 것 같은데....
: : : 한글입력을 지정했지만 무조건 영문으로 인식하는 것 같습니다.
: : :
: : : 기본 이벤트로 한글입력을 처리할 수 있을까요?

+ -

관련 글 리스트
36643 KeyPress or KeyDown으로 한글입력을 처리할 수 있을까요? leo21c 1283 2004/08/09
36649     Re:KeyPress or KeyDown으로 한글입력을 처리할 수 있을까요? 유영인 Cuperido 3425 2004/08/09
36662         [재질문]한글입력처리를 이렇게 하면 안될까요? leo21c 1921 2004/08/09
36663             Re:[재질문]한글입력처리를 이렇게 하면 안될까요? cuperido 1828 2004/08/09
36664                 답변감사합니다. 소스분석을 해 보겠습니다. leo21c 1271 2004/08/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.