首页 > 解决方案 > SDL2 程序不显示 IME 候选窗口

问题描述

我一直有一些 CJK 玩家询问我在 Windows 上基于 SDL2 的游戏,询问 IME 文本输入;候选列表窗口根本不会为他们显示,因此无法(或非常难以)键入某些字形组合。现在我正在使用当前最新的 SDL2,版本 2.0.12。

据我所知,我正在以大致正确的方式做每一件事。SDL_StartTextInput()当键盘焦点移动到(游戏内渲染的)可编辑文本字段时调用,SDL_StopTextInput()当键盘焦点离开它时,以及设置SDL_SetTextInputRect()告诉操作系统文本字段在哪里。SDL_TEXTINPUT并且SDL_TEXTEDITING事件似乎是通过事件循环来记录的;一切似乎都在工作,除了候选人列表窗口没有打开。

这一切都在 Linux 和 Mac 版本中完全正常运行,IME 候选列表窗口在正确的时间和正确的位置弹出并正常运行以允许在这些操作系统上输入组合的 CJK unicode 字形。只有在候选列表窗口永远不会打开的 Windows 上,这对我的一群玩家来说是个大问题。有人知道如何在 Windows 上的 SDL2 下处理 IME 组合吗?(我正在使用 Windows 10 的日语和简体中文默认 IME 进行所有这些测试)

任何人都可以告诉我该系统的用途吗?关于输入法的教程页面的细节非常薄,我找不到一个真正的演示程序来展示 IME 是如何在 SDL2 中实际处理的,或者我只是复制他们正在做的事情。

可能相关也可能不相关,但我的游戏是 OpenGL 3.3 游戏,使用 SDL 进行窗口管理、输入和跨平台多线程支持;我们根本没有使用 SDL 的内置渲染器。

编辑:

我在 GitHub 上放了一个最小的示例程序,展示了我所看到的。它只有 50 行 C 代码,所以如果我正在做一些极其愚蠢的事情,它应该很容易被发现!

标签: sdl-2ime

解决方案


推荐阅读