libsdl中文输入法候选列表不显示解决方案
2016-10-11 09:56
1021 查看
libsdl输入中文时输入法不显示,将WM_IME_SETCONTEXT事件处理给注释即可。
修改SDL_windowskeyboard.c找到IME_HandleMessage函数改为以下代码即可。
WM_IME_SETCONTEXT
If the application draws the composition window, the default IME window does not have to show its composition window. In this case, the application must clear the ISC_SHOWUICOMPOSITIONWINDOW value from the lParam parameter before passing the message to DefWindowProc or ImmIsUIMessage. To display a certain user interface window, an application should remove the corresponding value so that the IME will not display it.修改SDL_windowskeyboard.c找到IME_HandleMessage函数改为以下代码即可。
SDL_bool IME_HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM *lParam, SDL_VideoData *videodata) { SDL_bool trap = SDL_FALSE; HIMC himc = 0; if (!videodata->ime_initialized || !videodata->ime_available || !videodata->ime_enabled) return SDL_FALSE; switch (msg) { case WM_INPUTLANGCHANGE: IME_InputLangChanged(videodata); break; //输入法候选框不显示 //case WM_IME_SETCONTEXT: // *lParam = 0; // break; case WM_IME_STARTCOMPOSITION: trap = SDL_TRUE; break; case WM_IME_COMPOSITION: trap = SDL_TRUE; himc = ImmGetContext(hwnd); if (*lParam & GCS_RESULTSTR) { IME_GetCompositionString(videodata, himc, GCS_RESULTSTR); IME_SendInputEvent(videodata); } if (*lParam & GCS_COMPSTR) { if (!videodata->ime_uiless) videodata->ime_readingstring[0] = 0; IME_GetCompositionString(videodata, himc, GCS_COMPSTR); IME_SendEditingEvent(videodata); } ImmReleaseContext(hwnd, himc); break; case WM_IME_ENDCOMPOSITION: videodata->ime_composition[0] = 0; videodata->ime_readingstring[0] = 0; videodata->ime_cursor = 0; SDL_SendEditingText("", 0, 0); break; case WM_IME_NOTIFY: switch (wParam) { case IMN_SETCONVERSIONMODE: case IMN_SETOPENSTATUS: IME_UpdateInputLocale(videodata); break; case IMN_OPENCANDIDATE: case IMN_CHANGECANDIDATE: if (videodata->ime_uiless) break; trap = SDL_TRUE; IME_ShowCandidateList(videodata); himc = ImmGetContext(hwnd); if (!himc) break; IME_GetCandidateList(himc, videodata); ImmReleaseContext(hwnd, himc); break; case IMN_CLOSECANDIDATE: trap = SDL_TRUE; IME_HideCandidateList(videodata); break; case IMN_PRIVATE: { DWORD dwId = IME_GetId(videodata, 0); IME_GetReadingString(videodata, hwnd); switch (dwId) { case IMEID_CHT_VER42: case IMEID_CHT_VER43: case IMEID_CHT_VER44: case IMEID_CHS_VER41: case IMEID_CHS_VER42: if (*lParam == 1 || *lParam == 2) trap = SDL_TRUE; break; case IMEID_CHT_VER50: case IMEID_CHT_VER51: case IMEID_CHT_VER52: case IMEID_CHT_VER60: case IMEID_CHS_VER53: if (*lParam == 16 || *lParam == 17 || *lParam == 26 || *lParam == 27 || *lParam == 28) trap = SDL_TRUE; break; } } break; default: trap = SDL_TRUE; break; } break; } return trap; }
相关文章推荐
- 关于Xcode6模拟器 键盘不显示和没有中文输入法的解决方案
- phpstorm 输入法中文不同步 phpstorm 输入法不跟随光标解决办法 win7系统新安装的phpstorm2017.2版本,试了很多输入法,要么是不显示候选次,要么是输入法候选词总是在屏幕右
- 升级Python后中文输入法不显示候选词的解决
- 关于IDEA2017.2.5 输入法 中文输入框无法显示问题的解决方案
- Android在横屏状态下,打开软键盘(输入法),中文模式没有候选栏的解决方案
- 升级android studio 3.x 后,中文输入法候选词不显示问题
- [Putty]Putty ssh登陆,中文显示乱码的解决方案
- GTK+ 中文显示解决方案
- SuSE 9 32bit sp3 平台 ArcIMS 中文显示解决方案
- jsp中文显示乱码解决方案
- CMD中文乱码,不能输入中文,或显示为问号的问题解决方案
- xmms菜单乱码以及播放列表中文显示
- 在JSP和properties中采用中文显示解决方案
- HGE中文显示的一个解决方案
- jsp中文显示乱码解决方案
- jsp中文显示乱码解决方案
- SuSE 9.1 平台 ArcIMS 中文显示解决方案
- jsp中文显示乱码解决方案
- jsp中文显示乱码解决方案
- JSP显示中文问题的解决方案