在UI窗口下需要处理下列windows消息.WM_IME_SETCONTEXT激活或休眠输入法:如果fSet为TRUE,系统将激活当前输入法的某个窗口(状态窗、列表窗等),为FALSE时休眠当前输入法.其中lISCBits中指出对哪个窗口操作。
数值 | 含义 |
ISC_SHOWUICOMPOSITIONWINDOW | 显示编码窗口 |
ISC_SHOWUIGUIDWINDOW | 显示信息窗口 |
ISC_SHOWUICANDIDATEWINDOW | 显示0号列表窗口 |
(ISC_SHOWUICANDIDATEWINDOW << 1) | 显示1号列表窗口. |
(ISC_SHOWUICANDIDATEWINDOW << 2) | 显示2号列表窗口. |
(ISC_SHOWUICANDIDATEWINDOW << 3) | 显示3号列表窗口. |
wSubMessage= wParam; 受WM_IME_CONTROL 控制的消息
lpData = (LPVOID) lParam;
对应的数据
通常如果你设计此部分了,返回0。否则返回1。
2
通常如果你设计此部分了,返回0。否则返回1。3)
IMC_GETCOMPOSITONWINDOW
获取编码窗口位置, lParam为COMPOSITIONFORM结构地址。
如果此消息成功返回0,否则非零。 通常如果你设计此部分了,返回0。否则返回1。 4)IMC_GETSOFTKBDFONT
获取软键盘字体。 lParam字体结构LOGFONT地址。5)IMC_GETSOFTKBDPOS
wSubMessage= IMC_GETSOFTKBDSUBTYPE; lParam = 0; wSubMessage= IMC_GETSTATUSWINDOWPOS; lParam = 0; wSubMessage= IMC_SETCANDIDATEPOS; lpCANDIDATEFORM= (LPCANDIDATEFORM) lParam; 设置列表窗口的位置.此时lParam传送的是CANDIDATEFORM结构地址。 9 wSubMessage= IMC_SETCOMPOSITIONFONT; lpLogFont= (LPLOGFONT) lParam; 10 wSubMessage= IMC_SETCOMPOSITIONWINDOW; lpCOMPOSITIONFORM= (LPCOMPOSITIONFORM) lParam; wSubMessage= IMC_SETSOFTKBDDATA; lpSoftKbdData= (LPSOFTKBDDATA) lParam; 如果此消息成功返回0,否则非零。 注意:UI窗口不接受此消息,它的管理函数是NotifyIME。 wSubMessage= IMC_SETSOFTKBDSUBTYPE; lSubType= lParam; 注意:UI窗口不接受此消息,它的管理函数是NotifyIME。 wSubMessage= IMC_SETSOFTKBDFONT; lpLogFont= (LPLOGFONT)lParam; 如果此消息成功返回0,否则非零。 注意:UI窗口不接受此消息,它的管理函数是NotifyIME。 wSubMessage= IMC_SETSOFTKBDPOS; ptsPt= (POINTS)lParam; 如果此消息成功返回0,否则非零。 wSubMessage= IMC_SETSTATUSWINDOWPOS; ptsPt= (POINTS)lParam; 如果此消息成功返回0,否则非零。 wChar= wParam; lAttribute= lParam; lAttribute可取下列值得组合: wParam = 0 lParam= 0 wParam = 0 lParam= 0 fSelect= (BOOL)wParam; TRUE hKL= lParam; wParam = 0 lParam= 0 IME wSubMessage= wParam; lParam= lParam; wSubMessage = IMN_CLOSESTATUSWINDOW; lParam= 0; wSubMessage = IMN_OPENSTATUSWINDOW; lParam= 0; 当ime接收到此消息时,将产生状态窗口. wSubMessage = IMN_OPENCANDIDATE; lCandidateList= lParam; WM_IME_NOTIFY wSubMessage = IMN_CHANGECANDIDATE; lCandidateList= lParam; wSubMessage = IMN_CLOSECANDIDATE; lCandidateList= lParam; UI wSubMessage = IMN_SETCONVERSIONMODE; lParam= 0; wSubMessage = IMN_SETOPENSTATUS; lParam= 0; wSubMessage = IMN_SETCANDIDATEPOS; lCandidateList= lParam; 设置编码窗口字体 wSubMessage = IMN_SETCOMPOSITIONFONT; lParam= 0; wSubMessage = IMN_SETCOMPOSITIONWINDOW; lParam= 0; IMN_GUIDELINE wSubMessage = IMN_GUIDELINE; lParam= 0; wSubMessage = IMN_SOFTKBDDESTROYED; lParam= 0; Parameters 返回状态窗口坐标原点在屏幕窗口中的坐标结构POINTS。 8)IMC_SETCANDIDATEPOS
如果此消息成功返回0,否则非零。注意:UI窗口不接受此消息,它的管理函数是NotifyIME。)IMC_SETCOMPOSITONFONT设置编码窗口的字体.此时lParam传送的是LOGFONT结构地址。
注意:UI窗口不接受此消息,它的管理函数是NotifyIME。)IMC_SETCOMPOSITONWINDOW设置编码窗口属性,此时lParam传送的是COMPOSITIONFORM结构地址。
设置软键盘数据,此时lParam传送的是SOFTKBDDATA结构地址,用户设定自己的软键盘字符。
12)IMC_SETSOFTKBDSUBTYPE设置软键盘类型
15)IMC_SETSTATUSWINDOWPOS设置状态窗口位置,lParam传送的是POINTS结构
值 含义 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消息,可不处理。
用户程序可以接受此消息,以便自己显示用户输入的编码。WM_IME_SELECT系统发出WM_IME_SELECT以便选择一个新的ime。表示新的IME已选择,FALSE表示不被选择或关闭该输入法。
7、WM_IME_STARTCOMPOSITION当用户开始输入编码时,系统立即发送该消息到IME中,IME打开编码窗口。
1)IMN_CLOSESTATUSWINDOW关闭状态窗口时,系统发送IMN_CLOSESTATUSWINDOW消息。
有关状态串口的信息可用ImmGetConversionStatus获取,设置状态窗口的信息可用ImmSetConversionStatus. 3)IMN_OPENCANDIDATE打开或产生列表选择窗口
设置输入法状态
设置编码窗口
6)IMC_GETSOFTKBDSUBTYPE如果此消息成功返回0,否则非零。)IMC_GETCOMPOSITONFONT获取编码窗口字体结构, lParam为LOGFONT结构地址其中子消息有下列消息: 1)IMC_GETCANDIDATEPOS获取列表窗口的位置.此时lParam传送的是CANDIDATEFORM结构地址。如果此消息成功返回0,否则非零。获取软键盘位置,lParam = 0;
返回软键盘在屏幕窗口中的坐标结构POINTS。
LRESULT CALLBACK UIWndProc(HWND hUIWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
case WM_IME_SETCONTEXT:
fSet= (BOOL) wParam;
lISCBits = lParam;
}