□ 更改配置文件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;