IME输入法编程 第四章 在UI窗口下需要处理下列windows消息. |
2006-01-14 |
作者 不祥 |
第四章 在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; |