zoukankan      html  css  js  c++  java
  • CEGUI 中文输入与显示

    1. 中文的输入.
      处理windows窗口的WM_IME_COMPOSITION.如下面的源码:

    View Code
    //......
    case WM_IME_COMPOSITION:
    codeInput(hWnd, lParam);
    break;

    //......

    //--------------------------------------------------------------------------------------------
    // 编码输入
    void Win32AppHelper::codeInput(HWND hWnd, LPARAM lParam)
    {
    static wchar_t buf[1024];
    if (lParam & GCS_RESULTSTR)
    {
    //获取IME句柄
    HIMC hIMC = ImmGetContext(hWnd);
    //获取Unicode结果字符串的长度,这个长度怎么也不会比1024还长
    LONG buflen = ImmGetCompositionStringW(hIMC,GCS_RESULTSTR,NULL,0);
    //重置字符串长度的缓冲区为0,否则会出现先前的字符
    memset(buf,0, buflen*sizeof(wchar_t));
    //获取Unicode结果字符串
    ImmGetCompositionStringW(hIMC,GCS_RESULTSTR,buf,buflen);
    //逐个字符注入到CEGUI系统中
    for (int i=0; i<buflen; i++)
    {
    CEGUI::System::getSingleton().injectChar((CEGUI::utf32)buf[i]);
    }
    //释放IME句柄
    ImmReleaseContext(hWnd, hIMC);
    }
    }

    2. 中文的显示.
      到windows的font目录下面找一个中文字体,比如"楷书",复制到字体资源目录下面,再建立一个对应的kaishu.font文件,参考其它字体是怎么设置的,再在scheme里面添加这个字体,还要在程序里面使用这个字体:FontManager::getSingleton().create("kaishu.font");
      赋文本给窗口的时候,将中文字符串转换成CEGUI::utf8格式,可以使用下面的转换函数:

    View Code
    CEGUI::utf8* AToU8(const char* pMbcs)
    {
    static CEGUI::utf8 g_buf[1024] = {0};
    static wchar_t g_Unicode[1024] = {0};
    memset(g_Unicode, 0, sizeof(g_Unicode));
    memset(g_buf, 0, sizeof(g_buf));
    MultiByteToWideChar(CP_ACP, 0, pMbcs, strlen(pMbcs), g_Unicode, 1024);
    WideCharToMultiByte(CP_UTF8, 0, g_Unicode, wcslen(g_Unicode), (char*)g_buf, 1024, 0, 0);
    return g_buf;
    }

    然后给窗口赋值的时候,像这样:

    View Code
    WindowManager::getSingleton().getWindow("root/editbox")->setText((CEGUI::utf8*)(AToU8("中文测试").c_str()));

    OK!


  • 相关阅读:
    ES6中的解构赋值
    一·京京得水
    localStorage,sessionStorage和cookie的区别
    mondodb和mysql的区别
    Win10 x64连接Oracle
    JFinal项目实践(了如股掌)7
    JFinal项目实践(了如股掌)6
    JFinal项目实践(了如股掌)5
    JFinal项目实践(了如股掌)4
    JFinal项目实践(了如股掌)3
  • 原文地址:https://www.cnblogs.com/emyueguang/p/2317239.html
Copyright © 2011-2022 走看看