|
답글을 잘 읽었습니다. 한글입력처리가 방대하다고 말씀하셨는데 정보를 어디서
얻을 수 있는지 알려주세요.
제가 처리하고자 하는 것은 키보드로 한글을 입력받아 화면에 출력하는 것입니다.
답글을 읽고 이렇게 하면 되지 않을까 생각해서 처리해 봤습니다.
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값으로는 처리가 안되는 것 같은데....
: : 한글입력을 지정했지만 무조건 영문으로 인식하는 것 같습니다.
: :
: : 기본 이벤트로 한글입력을 처리할 수 있을까요?
|