ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DXUT::IME
    정리필요2 2008. 7. 8. 22:48

    오늘은 다국어 지원기인 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;


     

Designed by Tistory.