-
오늘은 다국어 지원기인 IME 의 설치와 사용법에 대해 정리해 보겠음.
우선 DXUT FrameWork의 CDXUTIMEEditBox 클래스(CDXUTEditBox 클래스를 상속)가 필요하다
첫번째, 프레임웍에서 필요한 파일을 추가하자
#include "DXUT.h"
#include "DXUTgui.h"
#include "DXUTguiIME.h"
우리에게 필요한 CDXUTIMEEditBox 클래스는 아래와 같은 상속을 받고있다
CDXUTControl > CDXUTEditBox > CDXUTIMEEditBox
그러므로 줄줄이 엮여 필요한 파일을 include해야한다 ㅡㅡ;
두번째, UI를 초기화하는 부분에 다음과 방식으로 IME 맴버변수를 선언하고 초기 설정을 해준다CDXUTIMEEditBox *pIMEEdit;
CDXUTIMEEditBox::InitDefaultElements( &g_SampleUI );
if( SUCCEEDED( CDXUTIMEEditBox::CreateIMEEditBox( &g_SampleUI, IDC_EDITBOX2, L"IME-capable edit control", 20, 390, 600, 45, false, &pIMEEdit ) ) )
{
g_SampleUI.AddControl( pIMEEdit );
pIMEEdit->GetElement( 0 )->iFont = 1;
pIMEEdit->GetElement( 1 )->iFont = 1;
pIMEEdit->GetElement( 9 )->iFont = 1;
pIMEEdit->GetElement( 0 )->TextureColor.Init( D3DCOLOR_ARGB( 128, 255, 255, 255 ) );
pIMEEdit->SetBorderWidth( 7 );
pIMEEdit->SetTextColor( D3DCOLOR_ARGB( 255, 64, 64, 64 ) );
pIMEEdit->SetCaretColor( D3DCOLOR_ARGB( 255, 64, 64, 64 ) );
pIMEEdit->SetSelectedTextColor( D3DCOLOR_ARGB( 255, 255, 255, 255 ) );
pIMEEdit->SetSelectedBackColor( D3DCOLOR_ARGB( 255, 40, 72, 72 ) );
}
세번째, 윈도우 크기가 변하거나 directX device 상태를 Reset해야 하는 상황에 다시 뿌려질 윈도우 상태를 정의해놓은 함수에 (대개 OnReset Device나 Reset Device ~등) 사용할 EditBox의 위치와 사이즈를(모든 UI control 마친가지) 정의해둔다if( g_SampleUI.GetControl( IDC_EDITBOX2 ) )
{
g_SampleUI.GetControl( IDC_EDITBOX2 )->SetLocation( 20, pBackBufferSurfaceDesc->Height - 280 );
g_SampleUI.GetControl( IDC_EDITBOX2 )->SetSize( pBackBufferSurfaceDesc->Width - 40, 45 );
}네번째, 에디트박스의 콘트롤 아이디와 메시지를 처리해줄 이벤트처리함수의 Switch문에 다음을 추가한다.
case IDC_EDITBOX2:
switch( nEvent )
{
case EVENT_EDITBOX_STRING:
{
StringCchPrintf( wszOutput, 1024, L"You have pressed Enter in edit control (ID %u).\nThe content of the edit control is:\n\"%s\"",
nControlID, ((CDXUTEditBox*)pControl)->GetText() );
g_SampleUI.GetStatic( IDC_OUTPUT )->SetText( wszOutput );// Clear the text if needed
if( g_SampleUI.GetCheckBox( IDC_CLEAREDIT )->GetChecked() )
((CDXUTEditBox*)pControl)->SetText( L"" );
break;
}case EVENT_EDITBOX_CHANGE:
{
StringCchPrintf( wszOutput, 1024, L"You have changed the content of an edit control (ID %u).\nIt is now:\n\"%s\"",
nControlID, ((CDXUTEditBox*)pControl)->GetText() );
g_SampleUI.GetStatic( IDC_OUTPUT )->SetText( wszOutput );break;
}
}
break;