mygui中文输入及显示

□ 更改配置文件MyGUI3.0/Media/MyGUI_Media下

☆ core_font.xml添加

<Resource type="ResourceTrueTypeFont" name="font_Simhei">
        <Property key="Source" value="simhei.ttf"/>
        <Property key="Size" value="19"/>
        <Property key="Resolution" value="50"/>
        <Property key="Antialias" value="false"/>
        <Property key="SpaceWidth" value="4"/>
        <Property key="TabWidth" value="8"/>
        <Property key="CursorWidth" value="2"/>
        <Property key="Distance" value="6"/>
        <Property key="OffsetHeight" value="0"/>
        <Codes>
           <Code range="33 126"/>
     <Code range="8192 8303"/>
      <Code range="12288 12351"/>
            <Code range="19969 40869"/>
            <Code range="65280 65519"/>
            <Code hide="128"/>
            <Code hide="1026 1039"/>
            <Code hide="1104"/>        </Codes>
    </Resource>

☆ simhei.ttf要从系统目录下的Fonts拷贝到当前目录。

☆ core_settings.xml中将默认字体改成

    <MyGUI type="Font">
        <Property key="Default" value="font_Simhei"/>
    </MyGUI>

 

在BaseManger.cpp中

 

void BaseManager::injectKeyPress(MyGUI::KeyCode _key, MyGUI::Char _text)
 {
  if (!mGUI)
   return;

   if(ImmIsIME(GetKeyboardLayout(0)))   
   {        
    if ( _key == MyGUI::KeyCode::Backspace && m_bImming )
     return;
   
    size_t handle = 0;   
    HIMC hIMC;     
    DWORD dwSize;     
    WCHAR lpWideStr[256];    
    memset(lpWideStr, 0, 256);   
    hIMC = ImmGetContext(hWnd);   
    if ( _key == MyGUI::KeyCode::Backspace )
    {
     DWORD dwSize = ImmGetCompositionStringW(hIMC, GCS_COMPREADSTR, NULL, 0); 
     if ( dwSize == 0 )
     {
      mGUI->injectKeyPress(_key, _text);
      return;
     }
    }
    dwSize = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, NULL, 0);  
    dwSize += sizeof(WCHAR);  
    ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, lpWideStr, dwSize);    
    for (INT i = 0; i < dwSize ;i++)      
    {           
     mGUI->injectKeyPress(_key, lpWideStr[i]);      
    }       
    ImmReleaseContext(hWnd, hIMC);    
   return;  
   }

  if (_key == MyGUI::KeyCode::Escape)
  {
   mExit = true;
   return;
  }
  else if (_key == MyGUI::KeyCode::F12)
  {
   if (mFocusInfo == nullptr)
    mFocusInfo = new diagnostic::InputFocusInfo();

   bool visible = mFocusInfo->getFocusVisible();
   mFocusInfo->setFocusVisible(!visible);
  }

  mGUI->injectKeyPress(_key, _text);
 }

 

过程函数中:

case WM_IME_STARTCOMPOSITION:
   {
    base::BaseManager *baseManager = (base::BaseManager*)GetWindowLongPtr(hWnd, GWL_USERDATA);
    baseManager->m_bImming =true;
    break;
   }
  case WM_IME_ENDCOMPOSITION:
   {
    base::BaseManager *baseManager = (base::BaseManager*)GetWindowLongPtr(hWnd, GWL_USERDATA);
    baseManager->m_bImming =false;
    break;
   }

 

头文件中

public:
  BOOL     m_bImming;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值