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
[36662] [재질문]한글입력처리를 이렇게 하면 안될까요?
leo21c [leo21c] 1921 읽음    2004-08-09 18:19
답글을 잘 읽었습니다. 한글입력처리가 방대하다고 말씀하셨는데 정보를 어디서
얻을 수 있는지 알려주세요.
제가 처리하고자 하는 것은 키보드로 한글을 입력받아 화면에 출력하는 것입니다.
답글을 읽고 이렇게 하면 되지 않을까 생각해서 처리해 봤습니다.

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