Windows95输入法机制介绍

上传人:宝路 文档编号:22987229 上传时间:2017-11-29 格式:DOC 页数:93 大小:558.95KB
返回 下载 相关 举报
Windows95输入法机制介绍_第1页
第1页 / 共93页
Windows95输入法机制介绍_第2页
第2页 / 共93页
Windows95输入法机制介绍_第3页
第3页 / 共93页
Windows95输入法机制介绍_第4页
第4页 / 共93页
Windows95输入法机制介绍_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《Windows95输入法机制介绍》由会员分享,可在线阅读,更多相关《Windows95输入法机制介绍(93页珍藏版)》请在金锄头文库上搜索。

1、Windows 95 输入法编辑器(IME)一、关于 Windows 95 混合语言 IME 在 Windows 95 中,IME 是一个动态链接库(DLL),与 Windows 3.1 远东版本 IME 不同的是,每一个运行的 IME 相当于混合语言键盘布局中的一种。与 Windows 3.1 IME 相比较,Windows 95 混合语言 IME 提供下列增强功能: 运行时相当于混合语言环境的一个部件 为每一个应用程序任务提供多重输入上下文 为每一个应用程序线程提供一个活动的 IME 通过应用程序消息循环给应用程序提供信息(消息顺序不能改变) 为无 IME 支持的应用程序和部分 IME 支

2、持的应用程序提供有力的支持 要得到全部的增强功能,应用程序需要支持 Windows 95 IME 应用程序。 本文档描述了 Windows 95 IME 体系结构的应用程序。 1、IME 的结构 Windows 95 IME 必须提供两个部件:IME 转换接口和 IME 用户接口。IME 转换接口由一组 IME 模块引出函数提供,这些函数被 IMM 调用.IME 用户接口由一组窗口提供,这些窗口接收消息并提供 IME 的用户界面。 2、IME 支持应用程序 应用程序有下列类型: 无 IME 支持应用程序:这种应用程序不控制 IME,然而,如果应用程序接受 DBCS 字符,用户可以通过 IME

3、在应用程序中输入 DBCS 字符。 部分 IME 支持应用程序:这种应用程序只控制不同的 IME 上下文,例如打开和关闭 IME、写作窗口等等,但是不重新显示任何 IME 用户界面。 完全 IME 支持应用程序:这种应用程序负责管理通过 IME 显示给应用程序的任何信息。 在 Windows 95 中,一个无 IME 支持应用程序有一个缺省的 IME 窗口和一个缺省的输入上下文。 部分 IME 支持应用程序使用预定义的“IME”类创建自己的 IME 窗口,可以管理或者不管理自己的输入上下文。 完全 IME 支持应用程序自己管理输入上下文,显示输入上下文给出的任何需要的信息,不使用 IME 窗口

4、。 二、IME 用户界面 IME 用户界面包括 IME 窗口、用户界面(UI)窗口以及 UI 窗口的部件。 1、特征 IME 类是实现 IME 用户界面部分的预定义全局窗口类。“IME”类与预定义的公共控制窗口类有许多相同的特点,IME 窗口实例与静态控制一样通过 CreateWindowEx 函数创建,IME 类窗口自己不响应用户输入,取而代之的是接收不同类型的控制消息实现全部 IME 用户接口。应用程序可以使用 IME 类创建自己的 IME 窗口,还可以使用 ImmGetDefaultIMEWnd 函数获取缺省 IME 窗口。创建自己的 IME 窗口或者使用缺省 IME 窗口的应用程序被称

5、为 IME 支持应用程序,具有以下优点(与对应的Windows 3.1 应用程序比较): 包括候选字列表窗口(候选窗口),每一个应用程序可以有自己的用户界面窗口实例,使得用户可以在任何输入过程的中途停止并切换到另一个应用程序。在 Windows 3.1 日文版本中,用户切换到另一个应用程序是必须放弃当前输入过程。 因为 IME 用户界面窗口包括应用程序窗口句柄,IME 用户界面窗口可以为应用程序提供缺省行为。例如当应用程序移动时 IME 用户界面窗口自动移动,自动跟随窗口中的插入符号位置,为每一个应用程序标示模式等等。 即使系统仅仅只提供一个 IME 类,IME 窗口仍然有两种类型。一种类型是

6、系统为无 IME 支持应用程序创建的 IME 窗口,DefWindowProc 函数为该窗口处理消息,DefWindowProc 函数的 IME 用户接口被线程的所有无 IME 支持窗口共享,在文档中,这种窗口称为缺省 IME 窗口。另一种类型是 IME 支持应用程序创建的 IME 窗口,在文档中,IME 支持应用程序创建的 IME 窗口称作应用程序 IME 窗口。 2、缺省和应用程序 IME 窗口 当线程初始化时系统创建缺省 IME 窗口,这就是说,线程自动获取缺省 IME 窗口。缺省 IME 窗口为无 IME 支持应用程序提供 IME 用户界面,当 IME 或者 IMM 生成一个 IME

7、消息(WM_IME_*)时,无 IME 支持应用程序传递该消息到 DefWindowProc函数,DefWindowProc 函数发送需要的消息到为应用程序提供缺省 IME 用户界面的缺省 IME 窗口。IME 支持应用程序当不从IME 获取消息时也可以使用缺省 IME 窗口,需要时可以使用自身的 IME 窗口。 3、IME 类 IME 类是 Windows 95 远东版本预定义的窗口类,就像 Edit 是预定义的窗口类一样。预定义的 IME 类实现全部的 IME 用户接口,处理所有来自 IME 和包含 IMM 函数的应用程序的消息,应用程序使用 IME 类创建自己的 IME 窗口。系统 IM

8、E 类不能被被任何 IME 替换。 窗口过程与 IME 类通过 WM_IME_SELECT 消息交互,该消息包括新选中的 IME 的键盘布局,IME 类使用键盘布局查找到每一个 IME 定义的类名。使用类名,IME 类为当前活动的 IME 创建 IME 用户界面窗口。 4、IME UI 类 每一个 IME 必须向系统注册自己的用户界面(UI)类,UI 类提供 IME 相关功能。当 IME 附加在进程上时 IME 注册自己的UI 类,即当 DLLEntry 函数被调用 DLL_PROCESS_ATTACH 功能时,IME 必须在对 ImeInquire 函数的调用过程中指定 UI 类名。UI 类

9、应该使用 CS_IME 窗口风格注册以使得每一个应用程序都可以使用 UI 类。UI 类名(包括空终结符)可以使用 16 位的TCHAR 字符,这个限制可能延续到 Windows 的未来版本。 当注册一个 UI 类时,应该指定 8 个字节的窗口附加数据(这就是说,设置 WNDCLASSEX 类的 cbWndExtra 成员的值为2*sizeof(LONG)),系统使用该窗口附加数据。 IME 可以在为应用程序执行任务时注册任何类和创建任何窗口。 下面的实例显示了怎样注册 IME 窗口类: BOOL WINAPI DLLEntry ( HINSTANCE hInstDLL, DWORD dwFun

10、ction, LPVOID lpNot) switch (dwFunction) case DLL_PROCESS_ATTACH: hInst= hInstDLL; wc.style = CS_MYCLASSFLAG | CS_IME; wc.lpfnWndProc = MyUIServerWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 2 * sizeof(LONG); wc.hInstance = hInst; wc.hCursor = LoadCursor( NULL, IDC_ARROW); wc.hIcon = NULL; wc.lpszMen

11、uName = (LPSTR) NULL; wc.lpszClassName = (LPSTR) szUIClassName; wc.hbrBackground = NULL; if(!RegisterClass(LPWNDCLASS)&wc) return FALSE; wc.style = CS_MYCLASSFLAG | CS_IME; wc.lpfnWndProc = MyCompStringWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = cbMyWndExtra; wc.hInstance = hInst; wc.hCursor = LoadC

12、ursor(NULL, IDC_ARROW); wc.hIcon = NULL; wc.lpszMenuName = (LPSTR) NULL; wc.lpszClassName = (LPSTR) szUICompStringClassName; wc.hbrBackground = NULL; if(!RegisterClass(LPWNDCLASS)&wc) return FALSE; break; case DLL_PROCESS_DETACH: UnregisterClass(szUIClassName,hInst); UnregisterClass(szUICompStringCl

13、assName,hInst); break; return TRUE; 5、UI 窗口 IME 类对应的 IME 窗口被应用程序或者系统创建,当 IME 窗口被创建时,IME 自身提供的 UI 窗口被创建并被 IME 窗口所拥有。每一个 UI 窗口有一个当前的输入上下文,当 UI 窗口接收到 IME 消息(WM_IME_*)时,可以通过调用 GetWindowLong函数和指定 IMMGWL_IMC 索引值查找到输入上下文,UI 窗口可以根据输入上下文处理消息,UI 窗口可以在除响应 WM_CREATE消息以外的任何时间查找到输入上下文。 IME 不允许改变 UI 窗口的窗口附加数据,如果 U

14、I 窗口的某个实例需要窗口附加数据,可以使用 IMMGWL_PRIVATE 参数值调用 SetWindowLong 和 GetWindowLong 函数,IMMGWL_PRIVATE 参数值提供为 UI 窗口的某个实例存取附加数据中 LONG 类型值的能力,如果需要大于 LONG 类型值的附加数据,可以保存一个内存块的句柄到IMMGWL_PRIVATE 域。 UI 窗口过程可以使用 DefWindowProc 函数,但是 UI 窗口不允许传递 IME 消息给 DefWindowProc 函数,即使某个 IME 消息没有被处理,UI 窗口也不允许传递该消息给 DefWindowProc 函数。

15、LRESULT UIWndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) HIMC hIMC; HGLOBAL hMyExtra; switch(msg) case WM_CREATE: / Allocate the memory bloack for the window instance.hMyExtra = GlobalAlloc(GHND,size_of_MyExtra); if (!hMyExtra) MyError(); / Set the memory handle into IMMGWL_PRIVATE SetW

16、indowLong(hWnd, IMMGWL_PRIVATE, (LONG)hMyExtra); .break; case WM_IME_xxxx: / Get IMC; hIMC = GetWindowLong(hWnd,IMMGWL_IMC); / Get the memory handle for the window instance. hMyExtra = GetWindowLong(hWnd, IMMGWL_PRIVATE); lpMyExtra = GlobalLock(hMyExtra); . GlobalUnlock(hMyExtra); break; . case WM_DESTROY: / Get the memory handle for the window instance. hMyExtra = GetWindowLong(hWnd, IMMGWL_PRIVATE); / Free the memory block for the window

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号