在游戏中使用输入法编辑器
注意
本文详细介绍使用 Windows XP 输入法编辑器 (IME) 。 对适用于 Windows Vista 的 IME 进行了更改,但本文中没有完全详细说明。 有关 Windows Vista IME 更改的详细信息,请参阅 Windows Vista 中的 输入法编辑器 (IME) - Microsoft 全球开发和计算门户上的 Ever-Expanding国际化视图 。
输入法编辑器 (输入法) 是一个程序,它允许使用标准键盘轻松输入东亚语言,例如中文、日语、朝鲜语和具有复杂字符的其他语言。 例如,使用 IME,用户可以在字处理器中键入复杂字符,或者大型多人在线游戏的玩家可以与复杂字符的朋友聊天。
本文介绍如何在全屏 Microsoft DirectX 应用程序中实现基本的 IME 编辑控件。 利用 DXUT 的应用程序会自动获取 IME 功能。 对于不使用框架的应用程序,本文介绍如何向编辑控件添加 IME 支持。
内容:
- 默认 IME 行为
- 将 IME 与 DXUT 配合使用
- 重写默认 IME 行为
- 函数
- 消息
- 示例
- IME 消息
- 呈现
- 限制
- 注册表信息
- 附录 A:每个操作系统的 CHT 版本
- 其他信息
- GetReadingString
- ShowReadingWindow
默认 IME 行为
IME 将键盘输入映射到特定于所选语言的拼音组件或其他语言元素。 在典型方案中,用户键入表示复杂字符发音的键。 如果 IME 将发音识别为有效,它将向用户提供一个单词或短语候选项列表,用户可以从中选择最终选择。 然后,通过一系列 Microsoft Windows WM_CHAR 消息将所选单词发送到应用程序。 由于 IME 通过截获键盘输入在应用程序以下级别工作,因此 IME 的存在对应用程序是透明的。 几乎所有 Windows 应用程序都可以轻松利用 IME,而无需知道它们的存在,也不需要特殊编码。
典型的 IME 显示多个窗口来引导用户完成字符输入,如以下示例所示。
窗口类型 | 说明 | IME 输出 |
---|---|---|
A. 阅读窗口 | 包含键盘的击键;通常在每次击键后更改。 | 读取字符串 |
B. 合成窗口 | 包含用户已使用 IME 撰写的字符的集合。 这些字符由应用程序顶部的 IME 绘制。 当用户通知 IME 合成字符串令人满意时,IME 随后通过一系列WM_CHAR消息将合成字符串发送到应用程序。 | 组合字符串 |
C. 候选窗口 | 当用户输入有效发音时,IME 会显示与给定发音匹配的候选字符列表。 然后,用户从此列表中选择预期字符,IME 会将此字符添加到“合成窗口”显示。 | 组合字符串中的下一个字符 |
D. 输入区域设置 指示器 | 显示用户为键盘输入选择的语言。 此指示器嵌入到 Windows 任务栏中。 可以通过打开“区域和语言选项”控制面板然后单击“语言”选项卡上的“详细信息”来选择输入语言。 | - |
将 IME 与 DXUT 配合使用
在 DXUT 中,CDXUTIMEEditBox 类实现 IME 功能。 此类派生自 CDXUTEditBox 类,CDXUTEditBox 类是框架提供的基本编辑控件。 CDXUTIMEEditBox 通过重写 CDXUTIMEEditBox 方法,扩展该编辑控件以支持 IME。 此类采用这种方式设计,可帮助开发人员了解在自己的编辑控件中实现 IME 支持时需要从框架中获取的内容。 本主题的其余部分介绍了框架(尤其是 CDXUTIMEEditBox)如何替代基本编辑控件以实现 IME 功能。
CDXUTIMEEditBox 中大多数特定于 IME 的变量都声明为静态,因为许多 IME 缓冲区和状态特定于进程。 例如,一个进程只有一个缓冲区用于组合字符串。 即使进程有 10 个编辑控件,它们也会共享相同的组合字符串缓冲区。 因此,CDXUTIMEEditBox 的合成字符串缓冲区是静态的,可防止应用程序占用不必要的内存空间。
CDXUTIMEEditBox 在以下 DXUT 代码中实现:
(SDK 根) \Samples\C++\Common\DXUTgui.cpp
重写默认 IME 行为
通常,IME 使用标准 Windows 过程来创建窗口 (请参阅 使用 Windows) 。 在正常情况下,这会产生令人满意的结果。 但是,当应用程序以全屏模式出现时(对于游戏很常见),标准窗口将不再工作,并且可能不会显示在应用程序顶部。 若要解决此问题,应用程序必须绘制 IME 窗口本身,而不是依赖 Windows 来执行此任务。
当默认的 IME 窗口创建行为不提供应用程序所需的内容时,应用程序可以替代 IME 窗口处理。 应用程序可以通过处理与 IME 相关的消息并调用 输入法管理器 (IMM) API 来实现此目的。
当用户与 IME 交互以输入复杂字符时,IMM 会向应用程序发送消息以通知应用程序重要事件,例如启动合成或显示候选窗口。 应用程序通常会忽略这些消息,并将其传递给默认消息处理程序,这会导致 IME 处理它们。 当应用程序(而不是默认处理程序)处理消息时,它完全控制每个 IME 事件发生的情况。 通常,消息处理程序通过调用 IMM API 检索各种 IME 窗口的内容。 应用程序获得此信息后,当需要呈现到显示器时,它可以正确绘制 IME 窗口本身。
函数
IME 需要获取阅读字符串、隐藏阅读窗口并获取阅读窗口的方向。 下表显示了每个 IME 版本的功能:
获取读取字符串 | 隐藏阅读窗口 | 阅读窗口的方向 | |
---|---|---|---|
版本 6.0 之前 | A. 直接读取 Window Access IME 专用数据。 请参阅“4 结构” | 捕获输入法私人消息。 请参阅“3 条消息” | 检查注册表信息。 请参阅“5 注册表信息” |
版本 6.0 之后 | GetReadingString | ShowReadingWindow | GetReadingString |
消息
对于实现 ShowReadingWindow () 的较新 IME,无需处理以下消息。
以下消息被应用程序消息处理程序捕获 (即,它们不会传递到 DefWindowProc) ,以防止显示读取窗口。
Msg == WM_IME_NOTIFY
wParam == IMN_PRIVATE
lParam == 1, 2 (CHT IME version 4.2, 4.3 and 4.4 / CHS IME 4.1 and 4.2)
lParam == 16, 17, 26, 27, 28 (CHT IME version 5.0, 5.1, 5.2 / CHS IME 5.3)
示例
以下示例演示如何从没有 GetReadingString () 的旧 IME 中获取读取字符串信息。 代码生成以下输出:
输出 | 说明 |
---|---|
DWORD dwlen | 读取字符串的长度。 |
DWORD dwerr | 错误字符的索引。 |
LPWSTR wstr | 指向读取字符串的指针。 |
BOOL unicode | 如果为 true,则读取字符串采用 Unicode 格式。 否则,它采用多字节格式。 |
CHT IME 版本 4.2、4.3 和 4.4
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
LPBYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + 24);
if (!p) break;
dwlen = *(DWORD *)(p + 7*4 + 32*4);
dwerr = *(DWORD *)(p + 8*4 + 32*4);
wstr = (WCHAR *)(p + 56);
unicode = TRUE;
CHT IME 版本 5.0
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
LPBYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + 3*4);
if (!p) break;
p = *(LPBYTE *)((LPBYTE)p + 1*4 + 5*4 + 4*2 );
if (!p) break;
dwlen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16);
dwerr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 + 1*4);
wstr = (WCHAR *)(p + 1*4 + (16*2+2*4) + 5*4);
unicode = FALSE;
CHT IME 版本 5.1、5.2 和 CHS 输入法版本 5.3
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
LPBYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + 4);
if (!p) break;
p = *(LPBYTE *)((LPBYTE)p + 1*4 + 5*4);
if (!p) break;
dwlen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * 2);
dwerr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * 2 + 1*4);
wstr = (WCHAR *) (p + 1*4 + (16*2+2*4) + 5*4);
unicode = TRUE;
CHS IME 版本 4.1
// GetImeId(1) returns VS_FIXEDFILEINFO:: dwProductVersionLS of IME file
int offset = ( GetImeId( 1 ) >= 0x00000002 ) ? 8 : 7;
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
BYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + offset * 4);
if (!p) break;
dwlen = *(DWORD *)(p + 7*4 + 16*2*4);
dwerr = *(DWORD *)(p + 8*4 + 16*2*4);
dwerr = min(dwerr, dwlen);
wstr = (WCHAR *)(p + 6*4 + 16*2*1);
unicode = TRUE;
CHS IME 版本 4.2
int nTcharSize = IsNT() ? sizeof(WCHAR) : sizeof(char);
LPINPUTCONTEXT lpIMC = _ImmLockIMC(himc);
BYTE p = *(LPBYTE *)((LPBYTE)_ImmLockIMCC(lpIMC->hPrivate) + 1*4 + 1*4 + 6*4);
if (!p) break;
dwlen = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * nTcharSize);
dwerr = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16 * nTcharSize + 1*4);
wstr = (WCHAR *) (p + 1*4 + (16*2+2*4) + 5*4);
unicode = IsNT() ? TRUE : FALSE;
输入法消息
全屏应用程序必须正确处理以下与输入法相关的消息:
WM_INPUTLANGCHANGE
用户更改输入区域设置后,IMM 会向应用程序的活动窗口发送WM_INPUTLANGCHANGE消息,组合键 (通常为 Alt+SHIFT) ,或者任务栏或语言栏上的输入区域设置指示器。 语言栏是一个屏幕控件,用户可以使用它配置文本服务。 (请参阅 如何显示语言栏。) 以下屏幕截图显示当用户单击区域设置指示器时显示的语言选择列表。
当 IMM 发送WM_INPUTLANGCHANGE消息时,CDXUTIMEEditBox 必须执行几个重要的任务:
- 调用 GetKeyboardLayout 方法以返回应用程序线程的输入区域设置标识符 (ID) 。 CDXUTIMEEditBox 类将此 ID 保存在其静态成员变量s_hklCurrent供以后使用。 应用程序必须知道当前的输入区域设置,因为每种语言的 IME 都有其独特的行为。 开发人员可能需要为不同的输入区域设置提供不同的代码。
- CDXUTIMEEditBox 初始化要显示在编辑框语言指示器中的字符串。 当应用程序以全屏模式运行时,并且任务栏和语言栏均不可见时,此指示器可以显示活动输入语言。
- 调用 ImmGetConversionStatus 方法以指示输入区域设置是处于本机转换模式还是非本机转换模式。 本机转换模式允许用户以所选语言输入文本。 非本机转换模式使键盘充当标准英语键盘。 请务必向用户提供关于 IME 处于哪种转换模式类型的视觉提示,以便用户能够轻松知道在点击某个键时需要哪些字符。 CDXUTIMEEditBox 通过语言指示器颜色提供此视觉提示。 当输入区域设置使用具有本机转换模式的 IME 时,CDXUTIMEEditBox 类将使用 m_IndicatorImeColor 参数定义的颜色绘制指示器文本。 当 IME 处于非本机转换模式或根本不使用 IME 时,类将使用 m_IndicatorEngColor 参数定义的颜色绘制指示器文本。
- CDXUTIMEEditBox 检查输入区域设置,并将朝鲜语的静态成员变量s_bInsertOnType设置为 TRUE,对于所有其他语言为 FALSE。 由于朝鲜语 IME 和所有其他 IME 的行为不同,因此需要此标志。 以朝鲜语以外的语言输入字符时,用户输入的文本将显示在撰写窗口中,用户可以自由更改合成字符串的内容。 用户对合成字符串感到满意时按 ENTER 键,合成字符串将作为一系列WM_CHAR消息发送到应用程序。 但是,在朝鲜语 IME 中,当用户按键输入文本时,会立即将字符发送到应用程序。 当用户随后按更多键来修改该初始字符时,编辑框中的字符会更改以反映用户的其他输入。 本质上,用户正在编辑框中撰写字符。 这两种行为非常不同,因此 CDXUTIMEEditBox 必须专门为每个行为编写代码。
- 调用静态成员方法 SetupImeApi 以从 IME 模块检索两个函数的地址:GetReadingString 和 ShowReadingWindow。 如果存在这些函数,则调用 ShowReadingWindow 来隐藏此输入法的默认读取窗口。 由于应用程序呈现阅读窗口本身,因此它会通知 IME 禁用绘制默认阅读窗口,以便它不会干扰全屏呈现。
激活应用程序的窗口时,IMM 会发送WM_IME_SETCONTEXT消息。 此消息的 lParam 参数包含一个标志,该标志向输入法指示应绘制哪些窗口,哪些窗口不应绘制。 由于应用程序正在处理所有绘图,因此它不需要输入法来绘制任何 IME 窗口。 因此,应用程序的消息处理程序只需将 lParam 设置为 0 并返回 。
为了使应用程序支持 IME,需要对与 IME 相关的消息WM_IME_SETCONTEXT进行特殊处理。 由于 Windows 通常会在调用 PanoramaInitialize () 方法之前将此消息发送到应用程序,因此 Panorama 没有机会处理 UI 以显示候选列表窗口。
以下代码片段指定 Windows 应用程序不显示与候选列表窗口关联的任何 UI,从而允许 Panorama 专门处理此 UI。
case WM_IME_SETCONTEXT:
lParam = 0;
lRet = DefWindowProc(hWnd, msg, wParam, lParam);
break;
//... more message processing
return lRet;
WM_IME_STARTCOMPOSITION
当用户的击键导致输入法组合即将开始时,IMM 会向应用程序发送WM_IME_STARTCOMPOSITION消息。 如果 IME 使用合成窗口,它将在合成窗口中显示当前合成字符串。 CDXUTIMEEditBox 通过执行两个任务来处理此消息:
- CDXUTIMEEditBox 清除组合字符串缓冲区和属性缓冲区。 这些缓冲区是 CDXUTIMEEditBox 的静态成员。
- CDXUTIMEEditBox 将s_bHideCaret静态成员变量设置为 TRUE。 此成员在基本 CDXUTEditBox 类中定义,控制在呈现编辑框时是否应绘制编辑框中的光标。 合成窗口的功能类似于包含文本和光标的编辑框。 为了避免在合成窗口可见时混淆,编辑框会隐藏其光标,以便一次只显示一个光标。
WM_IME_COMPOSITION
当用户输入击键以更改组合字符串时,IMM 会向应用程序发送WM_IME_COMPOSITION消息。 lParam 的值指示应用程序可以从输入法管理器 (IMM) 检索哪些类型的信息。 应用程序应通过调用 ImmGetCompositionString 来检索可用信息,然后将信息保存在其专用缓冲区中,以便稍后可以呈现 IME 元素。
CDXUTIMEEditBox 检查并检索以下组合字符串数据:
WM_IME_COMPOSITION lParam 标志值 | 数据 | 说明 |
---|---|---|
GCS_COMPATTR | 合成属性 | 此属性包含组合字符串中每个字符的状态等信息, (例如,已转换或未转换) 。 需要此信息,因为 CDXUTIMEEditBox 根据组合字符串字符的属性以不同的方式着色。 |
GCS_COMPCLAUSE | 组合子句信息 | 当日语输入法处于活动状态时,将使用此子句信息。 转换日语组合字符串时,可以将字符组合在一起,作为转换为单个实体的子句。 当用户移动光标时,CDXUTIMEEditBox 使用此信息来突出显示整个子句,而不只是子句中的一个字符。 |
GCS_COMPSTR | 合成字符串 | 此字符串是用户正在撰写的最新字符串。 这也是合成窗口中显示的字符串。 |
GCS_CURSORPOS | 组合光标位置 | 合成窗口实现光标,类似于编辑框中的光标。 应用程序可以在处理WM_IME_COMPOSITION消息时检索游标位置,以便正确绘制游标。 |
GCS_RESULTSTR | 结果字符串 | 当用户即将完成组合过程时,结果字符串可用。 应检索此字符串,并将字符发送到编辑框。 |
WM_IME_ENDCOMPOSITION
当 IME 组合操作结束时,IMM 向应用程序发送WM_IME_ENDCOMPOSITION消息。 当用户按 ENTER 键批准合成字符串或按 ESC 键取消合成时,可能会发生这种情况。 CDXUTIMEEditBox 通过将合成字符串缓冲区设置为空来处理此消息。 然后,它将s_bHideCaret设置为 FALSE,因为合成窗口已关闭,并且编辑框中的光标应再次可见。
CDXUTIMEEditBox 消息处理程序还将s_bShowReadingWindow设置为 FALSE。 此标志控制类是否在编辑框呈现自身时绘制阅读窗口,因此在合成结束时必须将其设置为 FALSE。
WM_IME_NOTIFY
每当输入法窗口更改时,IMM 就会向应用程序发送WM_IME_NOTIFY消息。 处理输入法窗口绘制的应用程序应处理此消息,以便它知道窗口内容的任何更新。 wParam 指示命令或正在发生的更改。 CDXUTIMEEditBox 处理以下命令:
IME 命令 | 说明 |
---|---|
IMN_SETOPENSTATUS | 此属性包含组合字符串中每个字符的状态等信息, (例如,已转换或未转换) 。 需要此信息,因为 CDXUTIMEEditBox 根据组合字符串字符的属性以不同的方式着色。 |
IMN_OPENCANDIDATE / IMN_CHANGECANDIDATE | 分别在候选窗口即将打开或更新时发送到应用程序。 当用户希望更改转换后的文本选项时,将打开候选窗口。 当用户移动选择指示器或更改页面时,将更新窗口。 CDXUTIMEEditBox 对这两个命令使用一个消息处理程序,因为所需的任务完全相同:
|
IMN_CLOSECANDIDATE | 在候选窗口即将关闭时发送到应用程序。 当用户从候选列表中进行选择时,就会发生这种情况。 CDXUTIMEEditBox 通过将候选窗口的可见标志设置为 FALSE,然后清除候选字符串缓冲区来处理此命令。 |
IMN_PRIVATE | 当用户键入或删除字符导致 IME 更新其读取字符串时,发送到应用程序。 应用程序应检索读取字符串并将其保存以供呈现。 CDXUTIMEEditBox 有两种方法来检索读取字符串,具体取决于 IME 中支持读取字符串的方式:
|
渲染
IME 元素和窗口的呈现非常简单。 CDXUTIMEEditBox 允许基类首先呈现,因为 IME 窗口应显示在编辑控件的顶部。 呈现基本编辑框后,CDXUTIMEEditBox 会检查每个 IME 窗口的可见性标志 (指示器、组合、候选项和阅读窗口) ,并在窗口应可见时绘制窗口。 有关不同 IME 窗口类型的说明,请参阅默认输入法行为。
输入区域设置指示器
输入区域设置指示器在任何其他 IME 窗口之前呈现,因为它是始终显示的元素。 因此,它应显示在其他 IME 窗口下方。 CDXUTIMEEditBox 通过调用 RenderIndicator 方法呈现指示器,其中指示器字体颜色是通过检查反映当前输入法转换模式的静态变量s_ImeState确定的。 启用 IME 且本机转换处于活动状态时,该方法使用 m_IndicatorImeColor 作为指示器颜色。 如果 IME 已禁用或处于非本机转换模式,则使用 m_IndicatorImeColor 绘制指示器文本。 默认情况下,指示器窗口本身绘制在编辑框的右侧。 应用程序可以通过重写 RenderIndicator 方法更改此行为。
下图显示了英语输入区域设置指示器、字母数字转换模式下的日语和本机转换模式下的日语的不同外观:
合成窗口
合成窗口的绘制在 CDXUTIMEEditBox 的 RenderComposition 方法中处理。 合成窗口浮动在编辑框上方。 应在基础编辑控件的光标位置绘制它。 CDXUTIMEEditBox 按如下所示处理呈现:
- 整个合成字符串是使用默认合成字符串颜色绘制的。
- 具有某些特殊属性的字符应以不同的颜色绘制,因此 CDXUTIMEEditBox 将检查组合字符串的字符并检查字符串属性。 如果 属性调用不同的颜色,则会使用适当的颜色再次绘制字符。
- 绘制合成窗口的光标以完成呈现。
对于朝鲜语 IME,光标应闪烁,但对于其他 IME,它不应闪烁。 使用朝鲜语输入法时,RenderComposition 根据计时器值确定光标是否应可见。
阅读和候选窗口
读取窗口和候选窗口由同一 CDXUTIMEEditBox 方法 RenderCandidateReadingWindow 呈现。 这两个窗口都包含垂直布局的字符串数组,如果是水平布局,则包含单个字符串。 RenderCandidateReadingWindow 中的大部分代码用于定位窗口,以便窗口的任何部分都落在应用程序窗口之外并被剪裁。
限制
IME 有时包含高级功能,以提高输入文本的便利性。 下图显示了较新的 IME 中的一些功能。 DXUT 中不存在这些高级功能。 实现对这些高级功能的支持可能很困难,因为没有定义接口来从 IME 中获取必要的信息。
具有扩展候选列表的高级繁体中文输入法:
高级日语输入法,其中包含一些候选条目,其中包含用于描述其含义的其他文本:
高级朝鲜语输入法,包括手写识别系统:
注册表信息
当当前 IME 为不实现 GetReadingString () 的旧 CHT 新拼音时,检查以下注册表信息以确定阅读窗口的方向。
密钥 | 值 |
---|---|
HKCU\software\microsoft\windows\currentversion\IME_Name | 键盘映射 |
其中: 如果 IME 文件版本为 5.1 或更高版本,IME_Name 为 MSTCIPH;否则IME_Name为 TINTLGNT。
如果以下任一情况,阅读窗口的方向为水平:
- IME 版本为 5.0,键盘映射值0x22或0x23
- IME 版本为 5.1 或版本 5.2,键盘映射值0x22、0x23 或 0x24。
如果两个条件都不满足,则阅读窗口为垂直。
附录 A:每个操作系统的 CHT 版本
操作系统 | CHT IME 版本 |
---|---|
Windows 98 | 4.2 |
Windows 2000 | 4.3 |
未知 | 4.4 |
Windows ME | 5.0 |
Office XP | 5.1 |
Windows XP | 5.2 |
独立 Web 下载 | 6.0 |
其他信息
有关其他信息,请参阅下列内容:
- 安装和使用输入法编辑器
- 国际文本显示
- Unicode 联盟
- 开发国际软件。 国际博士 第二版。 华盛顿州雷德蒙德:Microsoft 出版社,2003 年。
GetReadingString
获取读取字符串信息。
参数
-
himc
-
[in]输入上下文。
-
uReadingBufLen
-
[in]WCHAR 中 lpwReadingBuf 的长度。 如果为零,则表示查询读取缓冲区长度。
-
lpwReadingBuf
-
[out]返回读取字符串 (不为零结束) 。
-
pnErrorIndex
-
[out]返回读取字符串中错误字符的索引(如果有)。
-
pfIsVertical
-
[out]如果为 TRUE,则读取 UI 是垂直的。 否则为水平 puMaxReadingLen。
-
puMaxReadingLen
-
[out]读取 UI 长度。 最大读取长度不是固定的;它不仅取决于键盘布局,还取决于输入模式 (例如内部代码、代理项输入) 。
返回值
读取字符串长度。
备注
如果返回值大于 uReadingBufLen 的值,则所有输出参数都未定义。
此函数在 CHT IME 6.0 或更高版本中实现,可由 IME 模块句柄上的 GetProcAddress 获取;IME 模块句柄可由 ImmGetIMEFileName 和 LoadLibrary 获取。
要求
-
头
-
在 Imm.h 中声明。
-
导入库
-
使用 Imm.lib。
ShowReadingWindow
显示 (或隐藏) 阅读窗口。
参数
-
himc
-
[in]输入上下文。
-
bShow
-
[in]设置为 TRUE 可 (显示阅读窗口,设置为 FALSE 以将其隐藏) 。
返回值
备注
如果成功,则返回 TRUE,否则返回 FALSE。
要求
-
头
-
在 Imm.h 中声明。
-
导入库
-
使用 Imm.lib。