输入法编辑的一些资料

MFC 用Imm类库实现输入法修改输入模式 作用:该函数用于向输入法处理器发送通知消息,取消正在进行的输入组合字符串(Composition String)的处理。TRUE:表示将输入上下文打开,允许输入法处理器进行输入处理。参数: hIMC:输入上下文的句柄。hIMC:输入上下文的句柄。作用:该函数用于设置输入法的转换状态,指定输入法的模式。参数: hIMC:输入上下文的句柄。注意:通过这个函数,您可以设置输入法的转换状态,例如切换到日语平假名、片假名输入模式等。注意:在切换输入法输入模式时,可能需要取消当前的组合字符串,以清空输入状态。 阅读详情

windows系统提供的管理函数(Input Method Manager,简称IMM)。

IMM函数可以被IME函数使用,也可用于应用软件直接管理IME。

相关术语:

(1)input method context 简称IMC--输入法相关部分,在这里解释为:相关连的应用程序(进程)

(2)component of the input context 简称IMCC--IMC的部件,是INPUTCONTEXT 结构的成员。

一、IME中使用的IMM函数清单

ImmGetCompositionWindow //取编码窗口信息

ImmSetCompositionWindow //设置编码窗口信息

ImmGetCandidateWindow //取选择窗口信息

ImmSetCandidateWindow //设置选择窗口信息

ImmGetCompositionString //取编码窗口的某一信息

ImmSetCompositionString //设置编码窗口的某一信息

ImmGetCompositionFont //取编码字体

ImmSetCompositionFont //设置编码字体

ImmGetNumCandidateList //取选择区中编码数

ImmGetCandidateList //取选择区中编码

ImmGetGuideLine

ImmGetConversionStatus //取当前输入法的状态(ACSII,SHAPE,FULL等)

ImmGetConversionList //重新获得选择区转换表

ImmGetOpenStatus //取输入法打开属性

ImmSetConversionStatus //设置输入法状态

ImmSetOpenStatus //设置输入法打开状态

ImmNotifyIME //通报IME,输入法状态被改变

ImmGenerateMessage //将我们的汉字串法发送到与当前输入法相关联的应用软件中
ImmRequestMessage //向应用程序发送WM_IME_REQUEST

ImmLockIMC //获取当前IMC的INPUTCONTEXT结构信息,增加IMC 计数器
ImmUnlockIMC //释放IMC计数器
ImmGetIMCLockCount //取计数器值
ImmCreateIMCC //创建INPUTCONTEXT结构的一个成员
ImmDestroyIMCC //删除IMC成员缓冲区
ImmLockIMCC //取IMCC缓冲地址,同时使IMCC的计数器值增加
ImmUnlockIMCC //递减IMCC计数器
ImmReSizeIMCC //重新设置IMC的成员的缓冲区大小
ImmGetIMCCSize //取IMC成员的缓冲区大小
ImmGetIMCCLockCount //返回IMC计数器值
ImmGetHotKey //取输入法状态键,该函数供控制面板使用

ImmSetHotKey //设置输入法的热键
ImmCreateSoftKeyboard //产生一个软键盘
ImmDestroySoftKeyboard //销毁软键盘
ImmShowSoftKeyboard //显示或隐藏软键盘
二、IMM函数使用格式说明

1、BOOL WINAPI ImmGenerateMessage( //将我们的汉字串法发送到与当前输入法相关联的应用软件中
HIMC hIMC //与当前输入法相关联的应用软件的句柄,

//该结构的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_COMPOSITIONFONT

//=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 //当前应用程序句柄
)

返回:如果IMC计数器被减少到0了,返回FALSE,否则为TRUE.

注意:ImmLockIMC与ImmUnlockIMC必须成对出现,必须是相同的HIMC

5、HIMCC WINAPI ImmGetIMCLockCount( //取计数器值
HIMC hIMC //当前应用程序句柄
)

如果成功返回HIMC的计数器值,否则为NULL.

6、HIMCC WINAPI ImmCreateIMCC( //创建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 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 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 WINAPI ImmSetHotKey( //设置输入法的热键
DWORD dwHotKeyID,
UINT uModifiers,
UINT uVKey,
hKL hKL
)

15、HWND WINAPI ImmCreateSoftKeyboard( //产生一个软键盘
UINT uType, //软件盘上的键码含义的定义方式

//=SOFTKEYBOARD_TYPE_T1

//=SOFTKEYBOARD_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表示显示
)

如构成功返回 TRUE. 否则为 FALSE.


ime文件中必须使用的结构

前二章我们讲述了ime和imm函数,二者之间是靠下列结构通讯的。

1、IMEINFO

struct tagIMEInfo { //输入法的接口信息 用于ImeInquire函数中

DWORD dwPrivateDataSize;//用户设计的数据结构的字节数

DWORD fdwProperty; //输入法对键盘事件的相应特性

//其中其高字可为下列字节位的组合:

//=IME_PROP_AT_CARET 转换窗口是否放置在需插入字符的位置

//=IME_PROP_SPECIAL_UI 该输入法具有特殊用户接口

//=IME_PROP_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 fdwConversionCaps;//当前输入法具有的功能特性,如有软键、标点、中西文切换等功能

//=IME_CMODE_NATIVE 设置活动模式

//=IME_CMODE_FULLSHAPE 设置全角模式

//=IME_CMODE_CHARCODE 设置为字符模式

//=IME_CMODE_SOFTKBD //设置软键盘模式

//=IME_CMODE_NOCONVERSION //不支持模式变换

//=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; // 用户设置编码串的能力

//=SCS_CAP_COMPSTR

//=SCS_CAP_MAKEREAD

DWORD fdwSelectCaps; // 输入法切换时是否使用以前输入法的模式

//=SELECT_CAP_CONVMODE

//=SELECT_CAP_SENTENCE

} IIMEINFO;

2、COMPOSITIONSTR 用于编码管理

typedef struct tagCOMPOSITIONSTR { //用于存放编码信息的信息:所有的实际信息放在本结构的后面

DWORD dwSize; //当前编码信息需要的存储空间=读入的编码+属性+子串+属性+编码+属性+结果+属性

DWORD dwCompReadAttrLen; //读入的编码属性长度

DWORD dwCompReadAttrOffset; //存放在内存的位置

DWORD dwCompReadClsLen; //读入的子串长度

DWORD dwCompReadClsOffset; //存放在内存的位置

DWORD dwCompReadStrLen; //读入的编码长度

DWORD dwCompReadStrOffset; //存放在内存的位置

DWORD dwCompAttrLen; //编码属性长度

DWORD dwCompAttrOffset; //存放在内存的位置

DWORD dwCompClsLen; //编码子串长度

DWORD dwCompClsOffset; //存放在内存的位置

DWORD dwCompStrLen; //编码串长度

DWORD dwCompStrOffset; //存放在内存的位置

DWORD dwCursorPos; //当前光标位置

DWORD dwDeltaStart; //被修改编码的位置

DWORD dwResultReadClsLen; //读入结果子串长度

DWORD dwResultReadClsOffset; //存放在内存的位置

DWORD dwResultReadStrLen; //读入的编码长度

DWORD dwResultReadStrOffset; //存放在内存的位置

DWORD dwResultClsLen; //结果子串长度

DWORD dwResultClsOffset; //存放在内存的位置

DWORD dwResultStrLen; //结果串长度

DWORD dwResultStrOffset; //存放在内存的位置

DWORD dwPrivateSize; //用户自定义数据长度

DWORD dwPrivateOffset; //存放在内存的位置

} COMPOSITIONSTR;

 

3、CANDIDATEINFO 用于编码选择管理

typedef struct tagCANDIDATEINFO { //编码选择信息的信息,其后为实际编码列表数据

DWORD dwSize; //数据所占内存大小

DWORD dwCount; //表马列表个数

DWORD dwOffset[32]; //各个编码列表的内存位置

DWORD dwPrivateSize; //自定义数据尺寸

DWORD dwPrivateOffset; //缓冲区位置

} CANDIDATEINFO;

4、GUIDELINE

typedef struct tagGUIDELINE {

DWORD dwSize;

DWORD dwLevel; // the error level.

// GL_LEVEL_NOGUIDELINE,

// GL_LEVEL_FATAL,

// 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;

} GUIDELINE;

5、CANDIDATELIST

The CANDIDATELIST structure contains information about a candidate list.

typedef struct tagCANDIDATELIST { //编码选择列表信息 =〉管理编码窗口中的列表信息

DWORD dwSize; // 用字节表示的内存大小:=sizeof(CANDIDATELIST)+选择字符数据

DWORD dwStyle; // 列表串的取值方式

//=IME_CAND_UNKNOWN 列表数据的格式无定义

//=IME_CAND_READ 读到什么数据即为什么数据,一般我们使用该属性

//=IME_CAND_CODE 如果dwCount=1,dwOffset不是地址,而是实际数据,

// >1 dwOffset 表示地址

//=IME_CAND_MEANING

//=IME_CAND_RADICAL

//=IME_CAND_STROKES

DWORD dwCount; // 当前列表个数

DWORD dwSelection; // 当前选择的列表序号

DWORD dwPageStart; // 在列表窗口中所显示的列表的起始序号(上下翻页时用)

DWORD dwPageSize; // 一页显示的列表个数

DWORD dwOffset[]; // 列表数据存放区地址:[阿];[大]。。。。

} CANDIDATELIST;

6、COMPOSITIONFORM

typedef tagCOMPOSITIONFORM { //窗口位置、大小信息:

//由IMC_SETCOMPOSITIONWINDOW和IMC_SETCANDIDATEPOS消息使用

DWORD dwStyle; //管理窗口方式

//=CFS_DEFAULT 将编码窗口显示到隐含的位置

//=CFS_FORCE_POSITION // 以给定的坐标显示窗口,不受IME控制

//=CFS_POINT // 以给定的坐标显示窗口,受IME控制

//=CFS_RECT //以给定的大小显示窗口

POINT ptCurrentPos; //给定坐标

RECT rcArea; //给定窗口的小

}COMPOSITIONFORM;

7、CANDIDATEFORM

The CANDIDATEFORM structure is used for IMC_GETCANDIDATEPOS and IMC_SETCANDIDATEPOS messages.

typedef tagCANDIDATEFORM { //列表窗口信息

//由IMC_GETCANDIDATEPOS和IMC_SETCANDIDATEPOS消息处理

DWORD dwIndex; //列表窗口序号

DWORD dwStyle; //属性:

//=CFS_CANDIDATEPOS 指定显示位置

//=CFS_EXCLUDE 不可显示

//=CFS_DEFAULT 根据需要显示

POINT ptCurrentPos; //坐标位置

REC rcArea; //不可显示区

} CANDIDATEFORM;

8、STYLEBUF

typedef struct tagSTYLEBUF { //注册字结构

DWORD dwStyle;

TCHAR szDes cription[32]

} STYLEBUF;

9、SOFTKBDDATA

typedef struct tagSOFTKBDDATA { //软键盘中各键对应的汉字

UINT uCount; //键码数组个数(可以为1,2,当区分SHIFT键时为2,即:一组带SHIFT,一组不带SHIFT)

WORD wCode[][256] //对应的键码数据

} SOFTKBDDATA;

10、RECONVERTSTRING

typedef struct _tagRECONVERTSTRING { //用于W98和2000

DWOPD dwSize;

DWORD dwVersion;

DWORD dwStrLen;

DWORD dwStrOffset;

DWORD dwCompStrLen;

DWORD dwCompStrOffset;

DWORD dwTargetStrLen;

DWORD dwTargetStrOffset;

} RECONVERTSTRING;

11、IMEMENUITEMINFO

typedef _tagIMEMENUITEMINFO { //输入法菜单结构,W98/2000

UINT cbSize;

UINT fType;

UINT fState;

UINT wID;

HBITMAP hbmpChecked;

HBITMAP hbmpUnchecked;

DWORD dwItemData;

TCHAR szString[48];

HBITMAP hbmpItem;

}

12、INPUTCONTEXT

The INPUTCONTEXT structure is an internal data structure that stores Input Context data.

typedef struct tagINPUTCONTEXT { //IMC 数据存放区

HWND hWnd; //使用该IMC的窗口

BOOL fOpen; //IME的打开与关闭状态

POINT ptStatusWndPos; //状态窗口的位置

POINT ptSoftKbdPos; //软键盘的位置

DWORD fdwConversion; //IME状态(活动、不活动,全角等)

DWORD fdwSentence; //编码方式

union {

LOGFONTA A;

LOGFONTW W;

} lfFont; //字体

COMPOSITIONFORM cfCompForm; //编码格式结构

CANDIDATEFORM cfCandForm[4]; //列表选择结构

HIMCC hCompStr; //

HIMCC hCandInfo;

HIMCC hGuideLine

HIMCC hPrivate;

DWORD dwNumMsgBuf; //存放在hMsgBuf中的消息数

HIMCC hMsgBuf; //存放的消息,格式: [消息1] [wParam1] [lParam1] {[消息] [wParam2] [lParam2]...

//注意:我们输入的汉字串存放在这里

DWORD fdwInit //系统根据此值来初始本结构相应的信息

//=INIT_STATUSWNDPOS 初始化ptStatusWndPos

//=INIT_CONVERSION 初始化fdwConversion

//=INIT_SENTENCE 初始化fdwSentence

//=INIT_LOGFONT 初始化lfFont

//=INIT_COMPFORM 初始化cfCompForm

//=INIT_SOFTKBDPOS 初始化ptSoftKbdPos

DWORD dwReserve[3]; //将来版本扩展的信息

} INPUTCONTEXT;
 
 第四章 在UI窗口下需要处理下列windows消息.

1、WM_IME_SETCONTEXT

激活或休眠输入法

LRESULT CALLBACK UIWndProc(HWND hUIWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{

case WM_IME_SETCONTEXT:
fSet= (BOOL) wParam;

lISCBits = lParam;

}

如果fSet为TRUE,系统将激活当前输入法的某个窗口(状态窗、列表窗等),为FALSE时休眠当前输入法.

其中lISCBits中指出对哪个窗口操作。

数值 含义

ISC_SHOWUICOMPOSITIONWINDOW 显示编码窗口
ISC_SHOWUIGUIDWINDOW 显示信息窗口
ISC_SHOWUICANDIDATEWINDOW 显示0号列表窗口
(ISC_SHOWUICANDIDATEWINDOW << 1) 显示1号列表窗口.
(ISC_SHOWUICANDIDATEWINDOW << 2) 显示2号列表窗口.
(ISC_SHOWUICANDIDATEWINDOW << 3) 显示3号列表窗口.

2、WM_IME_CONTROL

管理当前输入法

wSubMessage= wParam; 受WM_IME_CONTROL 控制的消息

lpData = (LPVOID) lParam; 对应的数据

其中子消息有下列消息:

1)IMC_GETCANDIDATEPOS

获取列表窗口的位置.此时lParam传送的是CANDIDATEFORM结构地址。

如果此消息成功返回0,否则非零。

通常如果你设计此部分了,返回0。否则返回1。

2)IMC_GETCOMPOSITONFONT

获取编码窗口字体结构, lParam为LOGFONT结构地址

如果此消息成功返回0,否则非零。

通常如果你设计此部分了,返回0。否则返回1。

3)IMC_GETCOMPOSITONWINDOW

获取编码窗口位置,lParam为COMPOSITIONFORM结构地址。

 

如果此消息成功返回0,否则非零。

通常如果你设计此部分了,返回0。否则返回1。

4)IMC_GETSOFTKBDFONT

获取软键盘字体。 lParam字体结构LOGFONT地址。

5)IMC_GETSOFTKBDPOS

获取软键盘位置,lParam = 0;

返回软键盘在屏幕窗口中的坐标结构POINTS。

6)IMC_GETSOFTKBDSUBTYPE

wSubMessage= IMC_GETSOFTKBDSUBTYPE;

lParam = 0;

7)IMC_GETSTATUSWINDOWPOS

获取状态窗口位置

wSubMessage= IMC_GETSTATUSWINDOWPOS;

lParam = 0;

返回状态窗口坐标原点在屏幕窗口中的坐标结构POINTS。

8)IMC_SETCANDIDATEPOS

wSubMessage= IMC_SETCANDIDATEPOS;

lpCANDIDATEFORM= (LPCANDIDATEFORM) lParam;

设置列表窗口的位置.此时lParam传送的是CANDIDATEFORM结构地址。

如果此消息成功返回0,否则非零。

注意:UI窗口不接受此消息,它的管理函数是NotifyIME。


9)IMC_SETCOMPOSITONFONT

设置编码窗口的字体.此时lParam传送的是LOGFONT结构地址。

wSubMessage= IMC_SETCOMPOSITIONFONT;

lpLogFont= (LPLOGFONT) lParam;

注意:UI窗口不接受此消息,它的管理函数是NotifyIME。


10)IMC_SETCOMPOSITONWINDOW

设置编码窗口属性,此时lParam传送的是COMPOSITIONFORM结构地址。

wSubMessage= IMC_SETCOMPOSITIONWINDOW;

lpCOMPOSITIONFORM= (LPCOMPOSITIONFORM) lParam;

如果此消息成功返回0,否则非零。

注意:UI窗口不接受此消息,它的管理函数是NotifyIME。

11)IMC_SETSOFTKBDDATA

设置软键盘数据,此时lParam传送的是SOFTKBDDATA结构地址,用户设定自己的软键盘字符。

wSubMessage= IMC_SETSOFTKBDDATA;

lpSoftKbdData= (LPSOFTKBDDATA) lParam;

如果此消息成功返回0,否则非零。

注意:UI窗口不接受此消息,它的管理函数是NotifyIME。

12)IMC_SETSOFTKBDSUBTYPE

设置软键盘类型

wSubMessage= IMC_SETSOFTKBDSUBTYPE;

lSubType= lParam;

成功返回subtype,否则返回-1.

注意:UI窗口不接受此消息,它的管理函数是NotifyIME。

13)IMC_SETSOFTKBDFONT

设置软键盘字体,此时lParam传送的是LOGFONT结构地址

wSubMessage= IMC_SETSOFTKBDFONT;

lpLogFont= (LPLOGFONT)lParam;

如果此消息成功返回0,否则非零。

注意:UI窗口不接受此消息,它的管理函数是NotifyIME。

14)IMC_SETSOFTKBDPOS

设置软件位置,此时lParam传送的是POINTS结构

wSubMessage= IMC_SETSOFTKBDPOS;

ptsPt= (POINTS)lParam;

如果此消息成功返回0,否则非零。

15)IMC_SETSTATUSWINDOWPOS

设置状态窗口位置,此时lParam传送的是POINTS结构

wSubMessage= IMC_SETSTATUSWINDOWPOS;

ptsPt= (POINTS)lParam;

如果此消息成功返回0,否则非零。

3、WM_IME_COMPOSITION

当用户改变了编码状态时,发送此消息WM_IME_COMPOSITION

应用程序可以通过调用ImmGetCompositionString获取新的编码状态。

wChar= wParam; 最后输入到编码窗口的2字节的DBCS字符

lAttribute= lParam; 当前编码的含义。

lAttribute可取下列值得组合:

值 含义

GCR_ERRORSTR 修正错误
GCR_INFORMATIONSTR 修正信息串
GCS_COMPATTR 修正编码串属性.
GCS_COMPCLAUSE 修正编码信息.
GCS_COMPREADATTR 修正读入串的属性
GCS_COMPREADCLAUSE 修正读入串的属性.
GCS_COMPREADSTR 修正读入串。
GCS_COMPSTR 修正当前的编码
GCS_CURSORPOS 修正当前编码的光标位置.
GCS_DELTASTART 修正当前编码的开始位置
GCS_RESULTCLAUSE 修正结果串的信息.
GCS_RESULTREADCLAUSE 修正读入串的信息.
GCS_RESULTREADSTR 修正读入串.
GCS_RESULTSTR 修正编码结果串.
CS_INSERTCHAR 在当前位置插入一个字符
CS_NOMOVECARET 替换结果串

4、WM_IME_COMPOSITIONFULL

用户接口窗口不能增加编码窗口的尺寸时,ime用户接口窗口将发送WM_IME_COMPOSITIONFULL消息,可不处理。

wParam = 0

lParam= 0

5、WM_IME_ENDCOMPOSITION

当编码结束时ime发送此消息WM_IME_ENDCOMPOSITION

wParam = 0

lParam= 0

用户程序可以接受此消息,以便自己显示用户输入的编码。

6、WM_IME_SELECT

系统发出WM_IME_SELECT以便选择一个新的ime。

fSelect= (BOOL)wParam; TRUE表示新的IME已选择,FALSE表示不被选择或关闭该输入法。

hKL= lParam;

系统利用这个消息产生或关闭老的输入法用户窗口。

7、WM_IME_STARTCOMPOSITION

当用户开始输入编码时,系统立即发送该消息到IME中,IME打开编码窗口。

wParam = 0

lParam= 0

8、WM_IME_NOTIFY

IME消息组:

wSubMessage= wParam;

lParam= lParam;

各消息说明:

1)IMN_CLOSESTATUSWINDOW

关闭状态窗口时,系统发送IMN_CLOSESTATUSWINDOW消息。

wSubMessage = IMN_CLOSESTATUSWINDOW;

lParam= 0;

当用户接口窗口接收到此消息时,将关闭状态窗口。

2)IMN_OPENSTATUSWINDOW

产生或打开状态窗口

wSubMessage = IMN_OPENSTATUSWINDOW;

lParam= 0;

当ime接收到此消息时,将产生状态窗口.

有关状态串口的信息可用ImmGetConversionStatus获取,设置状态窗口的信息可用ImmSetConversionStatus.

3)IMN_OPENCANDIDATE

打开或产生列表选择窗口

wSubMessage = IMN_OPENCANDIDATE;

lCandidateList= lParam;

4)IMN_CHANGECANDIDATE

更新当前的列表选择窗口

WM_IME_NOTIFY

wSubMessage = IMN_CHANGECANDIDATE;

lCandidateList= lParam;

5)IMN_CLOSECANDIDATE

关闭选择窗口

wSubMessage = IMN_CLOSECANDIDATE;

lCandidateList= lParam;

UI窗口接收此消息后,将销毁列表选择窗口

IMN_SETCONVERSIONMODE

改变输入法状态模式管理

wSubMessage = IMN_SETCONVERSIONMODE;

lParam= 0;

IMN_SETOPENSTATUS

设置输入法状态

wSubMessage = IMN_SETOPENSTATUS;

lParam= 0;

IMN_SETCANDIDATEPOS

设置列表窗口位置

wSubMessage = IMN_SETCANDIDATEPOS;

lCandidateList= lParam;

 

Parameters

IMN_SETCOMPOSITIONFONT

设置编码窗口字体

wSubMessage = IMN_SETCOMPOSITIONFONT;

lParam= 0;

IMN_SETCOMPOSITIONWINDOW

设置编码窗口

wSubMessage = IMN_SETCOMPOSITIONWINDOW;

lParam= 0;

IMN_GUIDELINE

错误信息处理

wSubMessage = IMN_GUIDELINE;

lParam= 0;

IMN_SOFTKBDDESTROYED

关闭软键盘
wSubMessage = IMN_SOFTKBDDESTROYED;

lParam= 0;

 

输入法编程之 光标跟随    光标跟随是输入法系统最常见的特性。要实现这一特性,需要获取IME支持程序(最常见如word,notepad等)中插入符号caret的坐标位置。在Windows的IME环境中,可以通过使用IME核心数据结构INPUTCONTEXT的cfCompForm成员来获取IME宿主程序中文本光标位置。cfCompForm具有如下结构:typedef tagCANDIDATEFORM { //列表窗口信息 阅读详情

相关推荐

鸿蒙next角落里的知识:“输入法编辑”—IME Kit

IME Kit提供输入法框架和输入法服务两类API

DMZDAMS的博客 1252

lffont:LF-Font(具有局部样式表示和因子分解的少量快照字体生成)的官方PyTorch实施AAAI 2021

具有局部样式表示和分解的少量生成字体(AAAI 2021) LF-Font的PyTorch官方实施| Song Park 1 * ,Sanghyuk Chun 2 * ,Junbum Cha 2 ,Bado Lee 2 ,Hyunjung Shim 1 *平等贡献 1延世大学综合技术学院2 Clova AI Research,NAVER Corp.。 由于手动设计价格昂贵且对设计师的专业技能敏感,因此自动生成几幅字体的需求很高。 现有的少量生成字体的方法旨在学习从一些参考字形中解开样式和内容元素,并且主要集中于每种字体样式的通用样式表示。 但是,这种方法限制了该模型代表各种本地风格的模型

鸿蒙实战开发-通过输入法框架实现自绘编辑

本示例通过输入法框架实现自会编辑框,可以绑定输入法应用,从输入法应用输入内容,显示和隐藏输入法

m0_70749039的博客 1225

IME管理基本函数

Windows9x系统提供的ime管理函数           上一章,我们介绍了ime文件中必须设计的函数,这些函数要靠我们自己来设计。要完成这些函数的设计,需用到windows系统提供的管理函数(Input       Method   Manager,简称IMM)。                 IMM函数可以被IME函数使用,也可用于应用软件直接管理IME。               

daone的专栏 1928

IME消息、函数、命令、需要的数据结构、常量

IME消息  以下列出IME中用到的消息。WM_IME_CHAR(IME得到了转换结果中的一个字符)WM_IME_COMPOSITION(IME根据用户击键的情况更改了按键组合状态)WM_IME_COMPOSITIONFULL(IME检测到按键组合窗口的区域无法继续扩展)WM_IME_CONTROL(由应用程序直接向IME发出控制请求)WM_IME_ENDCOMPOSITION(IME完成了对用户...

weixin_30583563的博客 712

输入法编辑的一些资料收藏

输入法编辑的一些资料收藏  输入法编辑的一些资料收藏 windows系统提供的管理函数(Input Method Manager,简称IMM)。 IMM函数可以被IME函数使用,也可用于应用软件直接管理IME。 相关术语: (1)input method context 简称IMC--输入法相关部分,在这里解释为:相关连的应用程序(进程) (2)component of

quasiceo 679

android百度输入法表情符号,分析Android 搜狗输入法在微信和QQ中发送图片和表情...

好记性不如烂笔头。生活中多做笔记,不仅可以方便自己,还可以方便他人。背景有没有发现,有时候表情或图片的交流更能让气氛更愉悦。斗图,成了群里的日常小事,然而,当你没有图可斗的时候就尴尬了。最近,搜狗输入法提供了非常强大的各种斗图大全,这可不得了了,只要输入法你希望表达的意思的文字,就能搜到到相应意思的表情,这功能非常有意思。最近,老大要我研究一下搜狗输入法是如何直接在微信和QQ上发图片和表情的。作为...

weixin_39916355的博客 1293

win10输入法看不见选字框_Win10自带。实用基础功能。

哈哈哈哈哈今天无聊翻了翻素材库,发现了这篇文章。写完的时间是四月二十九,写了个寂寞,太好笑了。读起来,可能会感到头晕感到眼花,毫无逻辑。想着可能有用就发了吧。正片开始拿到新电脑最烦人的就是装各种软件,如果要紧急用电脑,在没有称手工具的情况下,电脑自带的功能就成了唯一选择。这次准备盘下Win10系统自带的5类基础技能。在常见的办公场景中,即使电脑被刷机、没wifi、没神器,也可以咻咻提升工...

weixin_31198993的博客 6850

windows 11自带输入法词库建立

以下应用适用于windows11 家庭 版。

qq_44493315的博客 5973

win10自带输入法快速输出当前日期及时间的实现方法

实现win10自带输入法输入”sj“输出当前日期及时间

weixin_59947213的博客 1325

Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题

Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题

p15097962069的博客 153

搜狗输入法自定义短语设置

1 简介 搜狗输入法的可以设置“自定义短语”,在搜狗设置的好处是不会局限于特定的IDE、软件,到哪里都能用,而且数量没有上限。 2 时间戳语法 点击&amp;amp;amp;amp;amp;quot;直接编辑配置文件&amp;amp;amp;amp;amp;quot;可以了解时间函数表达式: 函数 含义 举例 $year 年(4位) 2006、2008 $year_yy 年(2位) 06、08 $month_mm 月 12、08、03 $day_dd 日 06

代号4101的专栏 9232

Ubuntu 22.04虚拟机安装配置调整(语言输入法字体共享剪切板等等

2025.01.07安装配置Ubuntu22.04记一下。

Mintind的博客 1353

输入法编辑器概述

输入法编辑器(IME)可以减轻用户在输入他们可能想要的所有字符组合时所需的记忆负担。其工作过程是监视用户的键盘动作,预测用户可能想要输入的字符,然后提供一组可供用户选择输入的字符。   缺省情况下,IME提供一个IME窗口用来显示用户按下的按键以及符合当前按键组合定义的候选字符列表。应用程序可以使用输入法管理器(IMM)函数和消息来创建并管理它们自己的IME窗口,然后就可以提供一个定制的使用

trandy的专栏 1545

搜狗输入法皮肤编辑器实战指南

搜狗输入法皮肤编辑器是一款功能强大的个性化工具,允许用户根据自己的喜好设计和创建独特的输入法界面。这个编辑器提供了一个直观的拖放界面,无需编程知识就可以定制输入法的外观。它支持更换背景图片、调整字体和颜色,以及添加各种动态效果,满足用户对于美观、实用、个性化的需求。在本章中,我们将了解搜狗输入法皮肤编辑器的基本操作流程,以及它如何使得个性化定制变得简单易行。我们会探讨编辑器的核心功能,包括皮肤的预览、导出选项以及如何解决在皮肤编辑过程中可能遇到的常见问题。

weixin_42596246的博客 1530

鸿蒙HarmonyOS(开发进阶)在自绘编辑框中使用输入法

​ 在输入法框架中,可以通过getController方法获取到InputMethodController实例来绑定输入法并监听输入法应用的各种操作,比如插入、删除、选择、光标移动等。这样就可以在自绘编辑框中使用输入法,并实现更加灵活和自由的编辑操作。 ​

wea22984984的博客 1160

微软五笔码表编辑器:自定义输入法体验

本文还有配套的精品资源,点击获取 简介:微软五笔码表编辑器v1.01是一款为Windows 10用户设计的工具,内置了86五笔和98五笔码表,支持码表的替换和编辑。它允许用户根据个人喜好,从86版切换到98版,或者进行个性化定制,提升输入效率和准确性。该编辑器提供友好的用户界面,支持导入导出、字库管理、码表备份等功能,增强五笔输入法的个性化体验。 1. 微软五笔输入法...

weixin_32287387的博客 3432
上一篇: 虚幻3游戏引挚构架简介
gglike
博客等级 码龄21年 1粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值