본문 바로가기

GameEngine

일리히트 Irrlicht 1.7 버전 이상에서 한글 입력 IME 사용하기


일리히트에서 한글 출력하는 방법은 Win32 프로시저에서 IME메세지를 이용해서 입력받습니다..

일단 Irrlicht 프로젝트를 여시면.. 필터기준의로 Irrlicht/irr/device/CIrrDeviceWin32.cpp 란 파일이 있습니다.
    bool CIrrDeviceWin32::run()
함수 안에
    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
아래부분에
    TranslateMessage(&msg);
추가 해줌니다.


그리고 난뒤 메세지 프로시저 안으로 가신뒤에
    switch (message)
아래부분 적정한 위치에
아래와 같은 문장을 추가시켜주시면 한글을 사용할수가 있습니다..
case WM_IME_CHAR:
{
	dev = getDeviceFromHWnd (hWnd); 
	if (dev) 
	{
		event.EventType = irr:: EET_KEY_INPUT_EVENT; 
		event.KeyInput.PressedDown = true; 
		event.KeyInput.Key = irr:: KEY_OEM_CLEAR; 
		event.KeyInput.Shift = 0; 
		event.KeyInput.Control = 0; 			
#ifdef _UNICODE
		event.KeyInput.Char = (wchar_t) wParam; 
#else
		char bits [2] = { (char) ((wParam & 0xff00)>> 8), (char) (wParam & 0xff) }; 
		if (bits [0] == 0) 
			event.KeyInput.Char = (irr:: u16) wParam; 
		else 
			MultiByteToWideChar (CP_OEMCP, MB_PRECOMPOSED, bits, 2, & event.KeyInput.Char, 1); 
#endif		
		dev-> postEventFromUser (event);
	} 
	return 0;
}
위에 있는것처럼 써주시면 일리히트가 멀티바이트건 유니코드건 사용가능하시게 되고..
IME는 윈도우 기본 IME를 사용하게 됨니다..

그리고 윈도우 기본 IME가 많이 불편한건 사실인데 IME 를 따로 사용하시려면..
아래 일리히트 포럼에서 IrrlichtML 1.7.1 Unicode 를 다운받으신후에
   _IRR_USE_INPUT_METHOD
이부분 전체 검색하셔서 자신의 1.72소스에 붙여 넣으시면 됨니다..


참고 사항
 일리히트 포럼
 도플광어의 게임엔진 연구소