首先解决的是你要有一个支持中文的字体文件,然后模仿CEGUI的.font文件制作一个属于自己的.font文件,然后把它放进.scheme集中资源管理器中,这样在加载资源的时候就会加载自己做的.font文件了。
下一步你需要在CEGUISystem.h里面载添加一个 _injectChar(utf32 code_point );函数
下面是函数实现:
bool System::_injectChar(utf32 code_point )
{
#ifndef UNICODE
static char s_tempChar[3] = "";
static wchar_t s_tempWchar[2] = L"";
static bool s_flag = false;
unsigned char uch = (unsigned char)code_point;
if( uch >= 0xA1 )
{
if( !s_flag )
{
s_tempChar[0] = (char)uch; //第一个字节
s_flag = true;
return true;
}
else if( uch >= 0xA1 )
{
s_tempChar[1] = (char)uch; //第二个字节
s_flag = false;
MultiByteToWideChar( 0, 0, s_tempChar, 2, s_tempWchar, 1); //转成宽字节
s_tempWchar[1] = L'/0';
utf32 code = (utf32)s_tempWchar[0];
//Font* fnt = System::getSingleton().getDefaultFont();
return injectChar( code );
}
else
{
return injectChar(code_point);
}
}
else
{
s_flag = false;
return injectChar(code_point);
}
#else
return injectChar(code_point );
#endif
}
OK,最重要的事情做完了。
下一步就是开始调用他了
if (ImmIsIME(GetKeyboardLayout(0)))
{
System::getSingleton()._injectChar(wParam);
}
else
{
System::getSingleton().injectChar((utf32)wParam);
}
具体的你想要把它放到哪里我就不管了,只是还有一点要声明啊,就是在调用它的.cpp文件里面加上
#include <imm.h>
#pragma comment(lib,"imm32.lib")
大功告成,赶紧去试试吧