《2022年IME输入法编程 .pdf》由会员分享,可在线阅读,更多相关《2022年IME输入法编程 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VC 资料IME 输入法编程第一章 Windows9x系统下汉字输入法的基本原理Windows 系统下汉字输入法实际上是将输入的标准ascii 字符串按照一定的编码规则转换为汉字或汉字串,进入到目的地。由于应用程序各不相同,用户不可能自己去设计转换程序,因此, 汉字输入自然而然落到 WINDOWS系统管理中。一、输入法与系统的关系键盘事件应用程序Windows 的 USER.EXE 输入法管理器输入法系统的键盘事件有windows 的 user.exe软件接收后,user.exe在将键盘事件传导输入法管理器 (Input Method Manager, 简称 IMM) 中,管理器再将键盘事件传
2、到输入法中,输入法根据用户编码字典, 翻译键盘事件为对应的汉字(或汉字串 ), 然后再反传到user.exe中,user.exe再将翻译后的键盘事件传给当前正运行的应用程序,从而完成汉字的输入。二、汉字输入法的组成微软 Windows9x 系统中汉字输入法的名称是Input Method Editor ,简称 IME, 输入法的程序名称为 :*.ime,数据文件名称为*.MB, 即通常说的输入法编码表(字典 ).实际上 IME 文件是一个动态连接库程序(DLL ) ,它与 dll 文件没有区别,只是名称不同而已。一般汉字输入法都由三个窗口组成: 状态窗口( Status Windows)- 显
3、示当前的输入法状态(中文还是英文等站环信息);编码输入窗口 (Composition Windows)- 显示当前击键情况;汉字选择窗口 (Candidates Windows)- 列出当前编码的全部汉字(串),供用户选择或查询。上述三个窗口由基本的用户接口(User Interface )函数管理着。现在我们用Dumpbin.exe打开微软提供的拼音输入法(WINDOWSSYSTEMWINPY.IME )看看它有什么组成(这里一WINDOWS98为例,并假定 windows 系统安装在c:盘下) :C:Dumpbin c:windowssystemwinpy.ime Microsoft (R
4、) COFF Binary File Dumper Version 6.00.8168 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. Dump of file WINPY .IME File Type: DLL IME 实际为 dll 程序Section contains the following exports for WINPY.ime 0 characteristics 34A37323 time date stamp Fri Dec 26 17:04:35 1997 0.00 version 名师资料总结 -
5、 - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - 1 ordinal base 19 number of functions / 共有个函数19 number of names/ 对应个名称ordinal hint RV A name 1 0 0000A010 CandWndProc/选择汉字窗口注册函数2 1 0000E750 CompWndProc/输入编码窗口 注册函数3 2 0000FB50 ImeConfigure/配置当前 ime
6、参数函数4 3 0000FEC0 ImeConversionList/ 将字符或字符串转换成目标字符5 4 0000FFA0 ImeDestroy/退出当前使用的IME 6 5 000030D0 ImeEnumRegisterWord 7 6 0000FFB0 ImeEscape / 应用软件访问输入法的接口函数. 8 7 00003080 ImeGetRegisterWordStyle 9 8 0000E9A0 ImeInquire/启动并初始化当前IME 输入法10 9 0000A800 ImeProcessKey/IME 输入键盘事件管理函数11 A 00002C20 ImeRegist
7、erWord / 向输入法字典注册字符串12 B 000109A0 ImeSelect / 启动当前 IME 输入法13 C 000109E0 ImeSetActiveContext / 设置当前的输入处于活动状态. 14 D 0000C850 ImeSetCompositionString 由应用程序设置输入法编码15 E 0000AEE0 ImeToAsciiEx/将输入的键盘事件转换为汉字编码事件16 F 00002F40 ImeUnregisterWord / 删除被注册的字符串. 17 10 0000CA90 NotifyIME/IME 事件管理函数18 11 00005160 St
8、atusWndProc/状态窗口注册函数19 12 00002350 UIWndProc/用户界面接口函数Summary 5000 .ShareDa 7000 .data 2000 .idata 1000 .rdata 3000 .reloc 5000 .rsrc 2000 .sgroup 18000 .text 从上述可以看出,IME程序共有个出口函数组成,每一个函数都有特定的格式,它们担负着与windows 系统传递信息的作用,这些函数是供Windows 系统调用的。三、输入法的函数简介下面我们将介绍上述各个函数的功能及接口格式。1. BOOL ImeInquire( / 初始化 IME
9、LPIMEINFO lpIMEInfo, /用于初始化该输入法的结构地址LPTSTR lpszWndClass, / 当前输入法的名称LPCTSTR 或者 dword lpszData / 系统信息 ,9X 系列值为 0,NT/2000 下有实际值)如果该函数初始化成功,返回 TURE,否则为 FALSE 用户应该搞清楚IMEINFO 结构 ,特关系着你设计的输入法是否成功.有关该结构请看结构一章 . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - -
10、- - - - - - 2.DWORD IMEConversionList( / 将某字符或字符串转换成目标字符串HIMC hIMC, / 与当前输入法相关的应用程序句柄LPCTSTRlpSrc, / 要转换的字符串(也可能是结果串,可由 uFlag 指定 ) LPCANDIDA TELIST lpDst, / 转换后的字符串(也可能是源串,可由 uFlag 指定 ) DWORD dwBufLen, /转换后有几个字符UINT uFlag / 指定结果的存放位置) 如果成功 ,返回转换后的字符串长度3.BOOL ImeConfigure( / 用户设置输入法接口HKL hKL, / 当前输入法
11、句柄HWND hWnd, / 配置窗口的父窗口DWORD dwMode, / 配置什么LPVOID lpData / 用户设置的数据) 该函数的功能是提供给输入法使用者一个可以更改某些隐含设置的能力. 如果你用过别人的输入法,其中的 配置输入法 . 功能既是也 ! 对于一个初写输入法的人,可以不予理它 . 4.BOOL ImeDestroy( / 关闭当前输入法UINT uReserved / 无用(0) ) 成功返回TURE,否则为 FALSE 5.LRESULT ImeEscape( / 用户软件访问输入法内部信息的接口HIMC hIMC, /当前的应用程序句柄UINT uEscape,
12、/ 设置函数功能/=IME_ESC_QUERY _SUPPORT /=IME_ESC_RESERVED_LAST IME_ESC_RESERVED_FIRST /=IME_ESC_PRIV ATE_FIRST IME_ESC_PRIVATE_LAST /=IME_ESC_SEQUENCE_TO_ INTERNAL /=IME_ESC_GET_EUDC_ DICTIONARY /=IME_ESC_SET_EUDC_ DICTIONARY /=IME_ESC_MAX_KEY /=IME_ESC_IME_NAME /=IME_ESC_SYNC_HOTKEY /=IME_ESC_HANJA_MODE
13、/=IME_ESC_GETHELPFILENAME(只适应Windows 98 和 Windows 2000) /=IME_ESC_PRIV ATE_HOTKEY(w95下不可用 ) LPVOID lpData / 当前功能所需的数据) 如果失败 ,返回 0,否则有个功能决定有时 ,人们可以用此函数怀区输入法的名称、帮助文件名称等。当然,我们可以不提供这些功能。6、BOOL ImeSetActiveContext( /激活或搁置当前的输入法HIMC hIMC, /当前用户程序句柄BOOL fFlag / 激活或搁置:=TRUE 激活=FALSE 搁置名师资料总结 - - -精品资料欢迎下载 -
14、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - ) 成功返回TRUE,否则为 FALSE 7、BOOL ImeProcessKey( / 处理应用程序传入的所有击键事件,监测是否是当前输入法所需的HIMC hIMC, /应用程序句柄UINT uVirKey, / 需处理的虚键DWORD lParam, / 击键消息参数CONST LPBYTE lpbKeyState /当前键盘状态(256 字节) 如果此键是该输入法需要的,则返回TRUE,否则为 FALSE 只有返回t
15、rue 的击键, IME 才去处理8、BOOL NotifyIME( /输入法选择窗口状态管理函数:HIMC hIMC, /当前的应用程序句柄DWORD dwAction, /状态值DWORD dwIndex, / 与状态值有关的序号DWORD dwV alue /与状态值有关的值) 状态值说明:=NI_OPENCANDIDATE 打开编码选择窗口=NI_CLOSECANDIDATE 关闭当前的编码选择窗=NI_SELECTCANDIDATESTR 选摘编码此时: dwIndex 被选择的编码列表序号. dwValue 被选中的编码在当前的编码列表中的序号=NI_CHANGECANDIDATE
16、LIST 改变当前的编码列表(按pageup等键操作)此时: dwIndex 被选择的编码列表序号. dwValue 不用=NI_SETCANDIDA TE_PAGESTART 设置编码开始页号此时:dwIndex 被改变的编码列表序号dwValue 新页的开始序号. =NI_SETCANDIDA TE_PAGESIZE 改变编码列表页的大小此时: dwIndex 当前编码页序号dwValue 新的页大小=NI_CONTEXTUPDA TED 更新应用程序的信息的输入法的信息:移动位置,设置模式,设置 编 码 窗 口 , 字 体 。 此 时 : dwIndex 只 用 于dwValue=IMC
17、_SETCONVERSIONMODE, IMC_SETSENTENCEMODE dwValue 可取由WM_IME_CONTROL 发送的下列值: IMC_SETCANDIDATEPOS IMC_SETCOMPOSITIONFONT IMC_SETCOMPOSITIONWINDOW IMC_SETCONVERSIONMODE IMC_SETSENTENCEMODE IMC_SETOPENSTA TUS =NI_COMPOSITIONSTR 改变编码窗口中的编码此时: dwIndex 取下列值: CPS_COMPLETE 完成编码转换名师资料总结 - - -精品资料欢迎下载 - - - - -
18、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - - - - - - - - CPS_CONVERT 转换编码CPS_REVERT 取消当前的编码CPS_CANCEL 清除编码,并关闭编码窗dwValue 不用此函数成功,返回TRUE,否则为FALSE 9、BOOL ImeSelect( / 初始化输入法HIMC hIMC, /当前应用程序句柄BOOL fSelect / 是否初始化当前输入法,TRUE 表示初始化) 成功返回true,否则为FALSE The ImeSetCompositionString func
19、tion is used by an application to set the IME composition string structure with the data contained in the lpComp or lpRead parameters. The IME then generates a message. 10、BOOL WINAPI ImeSetCompositionString( /将编码窗口中输入的编码保存的编码结构中,/同时发送编码完成的消息/( WM_IME_COMPOSITION)给系统,HIMC hIMC, /当前的应用程序句柄DWORD dwInd
20、ex, / 设置此函数功能/=SCS_SETSTR /=SCS_CHANGEA TTR /=SCS_CHANGECLAUSE /= SCS_QUERYRECONVERTSTRING /=SCS_RECONVERTSTRING /=SCS_SETRECONVERTSTRING LPCVOID lpComp, / 编码数据区DWORD dwCompLen, / 编码数据区长度LPCVOID lpRead, / 读入的编码数据DWORD dwReadLen / 读入的编码数据长度)11、 UINT ImeToAsciiEx( /转换编码称汉字(串)UINT uVirKey, / 虚键UINT uSc
21、anCode, / 扫描码CONST LPBYTE lpbKeyState, /用户定义的键盘状态LPDWORD lpdwTransBuf, /转换后的数据存放区UINT fuState, / 活动菜单标志HIMC hIMC / 当前的应用程序句柄) 返回:返回值表示有几个消息,可理解为:本编码对应的汉字串有几个汉字组成(当然,这并不相等)。12、 BOOL WINAPI ImeRegisterWord( LPCTSTR lpszReading, DWORD dwStyle, LPCTSTR lpszString ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
22、 - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 19 页 - - - - - - - - - 13、 BOOL WINAPI ImeUnregisterWord( LPCTSTR lpszReading, DWORD dwStyle, LPCTSTR lpszString ) 14、 UINT WINAPI ImeGetRegisterWordStyle( UINT nItem, LPSTYLEBUF lpStyleBuf ) 15、 UINT WINAPI ImeEnumRegisterWord( hKL, REGISTERWORDENUMPR
23、OC lpfnEnumProc, LPCTSTR lpszReading, DWORD dwStyle, LPCTSTR lpszString, LPVOID lpData ) 16、 DWORD WINAPI ImeGetImeMenuItems( HIMC hIMC, DWORD dwFlags, DWORD dwType, LPIMEMENUITEMINFO lpImeParentMenu, LPIMEMENUITEMINFO lpImeMenu,DWORD dwSize ) 四.ime 的版本信息 (与普通 DLL 的区别 ) VS_VERSION_INFO VERSIONINFO 代
24、表字符含义FILEVERSION 4,0,0,950 /4.00.950 95版PRODUCTVERSION 4,0,0,950 /4.00.950 95版FILEFLAGSMASK 0 x3fL FILEFLAGS 0 xaL FILEOS 0 x10004L /VOS_DOS_WINDOWS32 WIN32软件 ,可在 DOS 下运行FILETYPE 0 x3L /VFT_DRV 驱动程序FILESUBTYPE 0 xbL /VFT2_DRV_INPUTMETHOD 输入法驱动程序BEGIN BLOCK StringFileInfo BEGIN BLOCK 080403a8 BEGIN V
25、ALUE Comments, 0 VALUE CompanyName, 唐码软件开发工作室0 VALUE FileDes cription, 唐码输入法版本 1.00 VALUE FileV ersion, 4.00.9500 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 19 页 - - - - - - - - - VALUE InternalName, 唐码输入法版本 1.00 VALUE LegalCopyright, Copyright (C) 唐码软件开发工作
26、室1999-19990 VALUE LegalTrademarks, 0 VALUE OriginalFilename, TM.IME0 VALUE PrivateBuild, 0 VALUE ProductName, 唐码输入法版本 1.00 VALUE ProductV ersion, 4.00.9500 VALUE SpecialBuild, 0 END 第二章Windows9x系统提供的 ime 管理函数上一章 ,我们介绍了ime 文件中必须设计的函数,这些函数要靠我们自己来设计。要完成这些函数的设计,需用到 windows 系统提供的管理函数(Input Method Manager
27、, 简称 IMM) 。 IMM 函数可以被 IME 函数使用,也可用于应用软件直接管理IME 。相关术语:(1)input method context 简称 IMC- 输入法相关部分,在这里解释为:相关连的应用程序(进程)(2)component of the input context 简称 IMCC-IMC的部件,是INPUTCONTEXT 结构的成员。一、 IME 中使用的IMM 函数清单ImmGetCompositionWindow /取编码窗口信息ImmSetCompositionWindow /设置编码窗口信息ImmGetCandidateWindow / 取选择窗口信息ImmS
28、etCandidateWindow / 设置选择窗口信息ImmGetCompositionString / 取编码窗口的某一信息ImmSetCompositionString / 设置编码窗口的某一信息ImmGetCompositionFont / 取编码字体ImmSetCompositionFont / 设置编码字体ImmGetNumCandidateList / 取选择区中编码数ImmGetCandidateList / 取选择区中编码ImmGetGuideLine ImmGetConversionStatus / 取当前输入法的状态(ACSII,SHAPE,FULL等)ImmGetCon
29、versionList / 重新获得选择区转换表ImmGetOpenStatus /取输入法打开属性ImmSetConversionStatus / 设置输入法状态ImmSetOpenStatus /设置输入法打开状态ImmNotifyIME /通报 IME ,输入法状态被改变ImmGenerateMessage /将我们的汉字串法发送到与当前输入法相关联的应用软件中ImmRequestMessage /向应用程序发送WM_IME_REQUESTImmLockIMC /获取当前 IMC 的 INPUTCONTEXT结构信息,增加IMC 计数器ImmUnlockIMC / 释放 IMC 计数器I
30、mmGetIMCLockCount /取计数器值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - ImmCreateIMCC / 创建 INPUTCONTEXT结构的一个成员ImmDestroyIMCC / 删除 IMC 成员缓冲区ImmLockIMCC /取 IMCC 缓冲地址,同时使IMCC 的计数器值增加ImmUnlockIMCC /递减 IMCC 计数器ImmReSizeIMCC / 重新设置IMC 的成员的缓冲区大小I
31、mmGetIMCCSize / 取 IMC 成员的缓冲区大小ImmGetIMCCLockCount /返回 IMC 计数器值ImmGetHotKey / 取输入法状态键,该函数供控制面板使用ImmSetHotKey / 设置输入法的热键ImmCreateSoftKeyboard / 产生一个软键盘ImmDestroySoftKeyboard / 销毁软键盘ImmShowSoftKeyboard / 显示或隐藏软键盘二、 IMM 函数使用格式说明1、BOOL WINAPI ImmGenerateMessage( /将我们的汉字串法发送到与当前输入法相关联的应用软件中HIMC hIMC / 与当前
32、输入法相关联的应用软件的句柄,/该结构的hMsgBuf 项即为汉字串消息) 成功为 TRUE,否则为FALSE 2、LRESULT WINAPI ImmRequestMessage( /向应用程序发送WM_IME_REQUEST/只是用于 w98 及 w2000 HIMC hIMC, /与当前输入法相关联的应用软件的句柄WPARAM wParam, / 与 WM_IME_REQUEST相关的 wP LPARAM lParam / 与 WM_IME_REQUEST相关的 LP /=IMR_COMPOSITIONWINOW /=IMR_CANDIDATEWINDOW /=IMR_COMPOSITI
33、ONFONT /=IMR_RECONVERTSTRING /=IMR_CONFIRMRECONVERTSTRING /=IMR_QUERYCHARPOSITION /=IMR_DOCUMENTFEED ) 3、 LPINPUTCONTEXT WINAPI ImmLockIMC( /获取当前 IMC 的 INPUTCONTEXT结构信息,增加IMC 计数器HIMC hIMC / 当前应用程序句柄) 成功返回INPUTCONTEXT 结构指针,否则为NULL 4、BOOL WINAPI ImmUnlockIMC( /释放 IMC 计数器HIMC hIMC / 当前应用程序句柄) 返回 :如果 IM
34、C 计数器被减少到0 了,返回 FALSE,否则为 TRUE. 注意 :ImmLockIMC与 ImmUnlockIMC必须成对出现 ,必须是相同的HIMC 5、HIMCC WINAPI ImmGetIMCLockCount( /取计数器值HIMC hIMC / 当前应用程序句柄名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - ) 如果成功返回HIMC 的计数器值,否则为NULL. 6、HIMCC WINAPI ImmCreat
35、eIMCC( /创建 INPUTCONTEXT结构的一个成员DWORD dwSize / 成员的缓冲区长度) 如果成功返回IMC 的成员句柄,否则为NULL 7、HIMCC WINAPI ImmDestroyIMCC( /删除 IMC 成员缓冲区HIMCC hIMCC /被删除的IMC 的成员) 如果成功返回NULL ,否则等于该HIMCC. 8、LPVOID WINAPI ImmLockIMCC( /取 IMCC 缓冲地址,同时使IMCC 的计数器值增加HIMCC hIMCC /IMC成员句柄) If the function is successful, the return value
36、is the pointer for the IMC component. Otherwise, the return value is NULL.9、BOOL WINAPI ImmUnlockIMCC( /递减 IMCC 计数器HIMCC hIMCC /IMC成员句柄) 如果 IMCC 的计数器值为零,则返回FALSE,否则为TRUE. 10、 HIMCC WINAPI ImmReSizeIMCC( /重新设置IMC 的成员的缓冲区大小HIMCC hIMCC, /IMC的成员句柄DWORD dwSize / 新缓冲区大小) 如果成功,返回新的HIMCC ,否则为NULL. 11、 DWORD
37、 WINAPI ImmGetIMCCSize( /取 IMC 成员的缓冲区大小HIMCC hIMCC /IMC成员句柄) 返回 IMC 成员的缓冲区大小12、 DWORD WINAPI ImmGetIMCCLockCount( /返回 IMC 计数器值HIMCC hIMCC /IMC成员的句柄) 成功返回该IMCC 的计数器值,否则为0 13、 BOOL WINAPI ImmGetHotKey( /取输入法状态键,该函数供控制面板使用DWORD dwHotKeyID, LPUINT lpuModifiers, LPUINT lpuVKey,LPHKL lphKL ) 14、 BOOL WINA
38、PI ImmSetHotKey( /设置输入法的热键DWORD dwHotKeyID, UINT uModifiers, UINT uVKey, hKL hKL ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 19 页 - - - - - - - - - 15、 HWND WINAPI ImmCreateSoftKeyboard( /产生一个软键盘UINT uType, / 软件盘上的键码含义的定义方式/=SOFTKEYBOARD_TYPE_T1 /=SOFTKEYB
39、OARD_TYPE_C1 UINT hOwner, /该输入法的 UI 窗口int x, / 定位坐标int y / 定位坐标) 成功返回软键盘的窗口句柄16、 BOOL WINAPI ImmDestroySoftKeyboard( /销毁软键盘HWND hSoftKbdWnd /软年盘窗口句柄) 成功为 TRUE,法哦则为FALSE. 17、 BOOL WINAPI ImmShowSoftKeyboard( /显示或隐藏软键盘HWND hSoftKbdWnd, /软年盘窗口句柄int nCmdShow / 窗口状态 =SW_HIDE 表示隐藏, =SW_SHOWNOACTIVATE 表示显示
40、) 如构成功返回TRUE. 否则为FALSE. 第三章ime文件中必须使用的结构前二章我们讲述了ime 和 imm 函数 ,二者之间是靠下列结构通讯的。1、IMEINFO struct tagIMEInfo /输入法的接口信息用于 ImeInquire 函数中DWORD dwPrivateDataSize;/ 用户设计的数据结构的字节数DWORD fdwProperty; /输入法对键盘事件的相应特性/其中其高字可为下列字节位的组合:/=IME_PROP_A T_CARET 转换窗口是否放置在需插入字符的位置/=IME_PROP_SPECIAL_UI 该输入法具有特殊用户接口/=IME_PRO
41、P_CANDLIST_START_FROM_1 输入法的选择窗口中汉字串的起始序号为1 /=IME_PROP_UNICODE 支持 UNICODE 字符/其中其低字可为下列字节位的组合:/=IME_PROP_END_UNLOAD /=IME_PROP_KBD_CHAR_FIRST 首先由键盘转换字符/=IME_PORP_NEED_ALTKEY将 ALT 键盘事件传送到IME 输入法内/=IME_PROP_IGNORE_UPKEYS 禁止上位键事件进入输入法内/=IME_PROP_COMPLETE_ON_UNSELECT 当关闭输入法时,完成编码的转换/ 用于 W98 及 2000 中DWORD
42、 fdwConversionCaps;/ 当前输入法具有的功能特性,如有软键、标点、中西文切换等功能/=IME_CMODE_NA TIVE 设置活动模式/=IME_CMODE_FULLSHAPE 设置全角模式/=IME_CMODE_CHARCODE 设置为字符模式名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - - - - - - - /=IME_CMODE_SOFTKBD /设置软键盘模式/=IME_CMODE_NOCONVERSION /不支持模
43、式变换/=IME_CMODE_EUDC / /=IME_CMODE_SYMBOL /设置标点字符模式DWORD fdwSentenceCaps; / /=IME_SMODE_PLAURALCLAUSE /=IME_SMODE_SINGLECONVERT /=IME_SMODE_AUTOMETIC /=IME_SMODE_CONVERSATION DWORD fdwUICaps; / 用户界面能力:支持软键盘等/=UI_CAP_2700 /=UI_CAP_ROT90 /=UI_CAP_ROTANY /=UI_CAP_SOFKBD DWORD fdwSCSCaps; / 用户设置编码串的能力/=S
44、CS_CAP_COMPSTR /=SCS_CAP_MAKEREAD DWORD fdwSelectCaps; / 输入法切换时是否使用以前输入法的模式/=SELECT_CAP_CONVMODE /=SELECT_CAP_SENTENCE IIMEINFO; 2、COMPOSITIONSTR 用于编码管理typedef struct tagCOMPOSITIONSTR /用于存放编码信息的信息:所有的实际信息放在本结构的后面DWORD dwSize; / 当前编码信息需要的存储空间=读入的编码 +属性 +子串 +属性 +编码 +属性+结果 +属性DWORD dwCompReadAttrLen;
45、/读入的编码属性长度DWORD dwCompReadAttrOffset; /存放在内存的位置DWORD dwCompReadClsLen; / 读入的子串长度DWORD dwCompReadClsOffset; /存放在内存的位置DWORD dwCompReadStrLen; / 读入的编码长度DWORD dwCompReadStrOffset; /存放在内存的位置DWORD dwCompAttrLen; /编码属性长度DWORD dwCompAttrOffset; /存放在内存的位置DWORD dwCompClsLen; / 编码子串长度DWORD dwCompClsOffset; /存放
46、在内存的位置DWORD dwCompStrLen; /编码串长度DWORD dwCompStrOffset; /存放在内存的位置DWORD dwCursorPos; / 当前光标位置DWORD dwDeltaStart; / 被修改编码的位置DWORD dwResultReadClsLen; / 读入结果子串长度DWORD dwResultReadClsOffset; /存放在内存的位置DWORD dwResultReadStrLen; / 读入的编码长度DWORD dwResultReadStrOffset; /存放在内存的位置名师资料总结 - - -精品资料欢迎下载 - - - - - -
47、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 - - - - - - - - - DWORD dwResultClsLen; /结果子串长度DWORD dwResultClsOffset; /存放在内存的位置DWORD dwResultStrLen; / 结果串长度DWORD dwResultStrOffset; /存放在内存的位置DWORD dwPrivateSize; / 用户自定义数据长度DWORD dwPrivateOffset; /存放在内存的位置 COMPOSITIONSTR; 3、CANDIDA TEINF
48、O 用于编码选择管理typedef struct tagCANDIDA TEINFO /编码选择信息的信息,其后为实际编码列表数据DWORD dwSize; / 数据所占内存大小DWORD dwCount; / 表马列表个数DWORD dwOffset32; /各个编码列表的内存位置DWORD dwPrivateSize; / 自定义数据尺寸DWORD dwPrivateOffset; /缓冲区位置 CANDIDA TEINFO; 4、GUIDELINE typedef struct tagGUIDELINE DWORD dwSize; DWORD dwLevel; / the error l
49、evel. / GL_LEVEL_NOGUIDELINE, / GL_LEVEL_FA TAL, / GL_LEVEL_ERROR,/ GL_LEVEL_WARNNING, / GL_LEVEL_INFORMATION DWORD dwIndex; / GL_ID_NODICTIONARY and so on. DWORD dwStrLen; / Error Strings, if this is 0, there / is no error string. DWORD dwStrOffset; DWORD dwPrivateSize; DWORD dwPrivateOffset; GUIDE
50、LINE; 5、CANDIDA TELIST The CANDIDA TELIST structure contains information about a candidate list. typedef struct tagCANDIDA TELIST /编码选择列表信息=管理编码窗口中的列表信息DWORD dwSize; / 用字节表示的内存大小:=sizeof(CANDIDA TELIST)+ 选择字符数据DWORD dwStyle; / 列表串的取值方式/=IME_CAND_UNKNOWN 列表数据的格式无定义/=IME_CAND_READ 读到什么数据即为什么数据,一般我们使用该