给开源软件提需求讲究一个基本流程:浏览issues列表->如果没人提到再提交issue。毫不意外地,早就有人请求添加输入法支持了:aseprite#1767。最有意思的是,这个issue最早是2018年提交的,核心维护者dacap一而再、再而三地提高该issue的优先级,最终却在2022年取消了assignment状态。四舍五入就是说,放生了。之后开发者方面再没有动作,而用户们时不时会冒出一个问句:“Any update on this?”
while (res) { BOOL res = GetMessage(&msg, nullptr, 0, 0);
if (res) { if (msg.message == WM_KEYDOWN || msg.message == WM_KEYUP) { // 我假设只有输入法输入的字符是virtual key if (msg.message == WM_KEYDOWN && msg.wParam == VK_PROCESSKEY) { // 判断用户是否在可输入区域 if (IMEManagerWin::instance()->textInput()) { TranslateMessage(&msg); } } } } }
除此之外,我还实现了一个设置输入法位置的接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
voidIMEManagerWin::onStartComposition(HWND hwnd)const { // Set IME form position RECT windowRect; HIMC imc = ImmGetContext(hwnd);
if (imc && GetWindowRect(hwnd, &windowRect)) { // Get caret relative position to the window POINT pos = { m_screenCaretPos.x - windowRect.left, m_screenCaretPos.y - windowRect.top, }; // Set IME form position: just below the caret COMPOSITIONFORM cf = { 0 }; cf.dwStyle = CFS_FORCE_POSITION; cf.ptCurrentPos = pos; ImmSetCompositionWindow(imc, &cf); } }