在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
如果此消息成功返回 0 ,否则非零。 注意: UI 窗口不接受此消息,它的管理函数是 NotifyIME 。 ) IMC_SETCOMPOSITONFONT 设置编码窗口的字体 . 此时 lParam传送的是LOGFONT结构地址。
wSubMessage= IMC_SETCOMPOSITIONFONT;
lpLogFont= (LPLOGFONT) lParam;
10
注意:UI窗口不接受此消息,它的管理函数是NotifyIME。)IMC_SETCOMPOSITONWINDOW设置编码窗口属性,此时lParam传送的是COMPOSITIONFORM结构地址。
wSubMessage= IMC_SETCOMPOSITIONWINDOW;
lpCOMPOSITIONFORM= (LPCOMPOSITIONFORM) lParam;
如果此消息成功返回 0 ,否则非零。
注意:UI窗口不接受此消息,它的管理函数是NotifyIME。
设置软键盘数据,此时 lParam传送的是SOFTKBDDATA结构地址,用户设定自己的软键盘字符。wSubMessage= IMC_SETSOFTKBDDATA;
lpSoftKbdData= (LPSOFTKBDDATA) lParam;
如果此消息成功返回0,否则非零。
注意:UI窗口不接受此消息,它的管理函数是NotifyIME。
12)IMC_SETSOFTKBDSUBTYPE 设置软键盘类型
wSubMessage= IMC_SETSOFTKBDSUBTYPE;
lSubType= lParam;
成功返回 subtype ,否则返回 -1.
注意:UI窗口不接受此消息,它的管理函数是NotifyIME。
wSubMessage= IMC_SETSOFTKBDFONT;
lpLogFont= (LPLOGFONT)lParam;
如果此消息成功返回0,否则非零。
注意:UI窗口不接受此消息,它的管理函数是NotifyIME。
此时14)IMC_SETSOFTKBDPOS 13)IMC_SETSOFTKBDFONT 设置软键盘字体, lParam传送的是LOGFONT结构地址 设置软件位置,此时 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;
lAttribute= lParam;
最后输入到编码窗口的 2 字节的 DBCS 字符 当前编码的含义。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
用户程序可以接受此消息,以便自己显示用户输入的编码。 WM_IME_SELECT 系统发出 WM_IME_SELECT 以便选择一个新的 ime 。 表示新的 IME 已选择, FALSE 表示不被选择或关闭该输入法。fSelect= (BOOL)wParam; TRUE
hKL= lParam;
系统利用这个消息产生或关闭老的输入法用户窗口。
7、WM_IME_STARTCOMPOSITION 当用户开始输入编码时,系统立即发送该消息到 IME 中, IME 打开编码窗口。wParam = 0
lParam= 0
IME
wSubMessage= wParam;
lParam= lParam;
8、WM_IME_NOTIFY消息组:各消息说明:
1)IMN_CLOSESTATUSWINDOW 关闭状态窗口时,系统发送 IMN_CLOSESTATUSWINDOW 消息。wSubMessage = IMN_CLOSESTATUSWINDOW;
lParam= 0;
当用户接口窗口接收到此消息时,将关闭状态窗口。IMN_OPENSTATUSWINDOW产生或打开状态窗口
wSubMessage = IMN_OPENSTATUSWINDOW;
lParam= 0;
当ime接收到此消息时,将产生状态窗口.
wSubMessage = IMN_OPENCANDIDATE;
有关状态串口的信息可用ImmGetConversionStatus获取,设置状态窗口的信息可用ImmSetConversionStatus. 3)IMN_OPENCANDIDATE 打开或产生列表选择窗口lCandidateList= lParam;
WM_IME_NOTIFY
wSubMessage = IMN_CHANGECANDIDATE;
lCandidateList= lParam;
关闭选择窗口wSubMessage = IMN_CLOSECANDIDATE;
lCandidateList= lParam;
UI
窗口接收此消息后 , 将销毁列表选择窗口 IMN_SETCONVERSIONMODE 改变输入法状态模式管理
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
5)IMN_CLOSECANDIDATE 4)IMN_CHANGECANDIDATE 更新当前的列表选择窗口
返回状态窗口坐标原点在屏幕窗口中的坐标结构POINTS。 8)IMC_SETCANDIDATEPOS
)IMC_GETSTATUSWINDOWPOS获取状态窗口位置
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;
}