IME消息

本文档详细介绍了Windows输入法编辑器(IME)的消息处理流程,包括WM_IME_SETCONTEXT、WM_IME_CONTROL等消息的作用及参数解释,并对特定消息如WM_IME_COMPOSITION的属性进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UI窗口下需要处理下列windows消息.WM_IME_SETCONTEXT激活或休眠输入法如果fSetTRUE,系统将激活当前输入法的某个窗口(状态窗、列表窗等),为FALSE时休眠当前输入法.其中lISCBits中指出对哪个窗口操作。

数值含义
 
ISC_SHOWUICOMPOSITIONWINDOW显示编码窗口
ISC_SHOWUIGUIDWINDOW显示信息窗口
ISC_SHOWUICANDIDATEWINDOW显示0号列表窗口
(ISC_SHOWUICANDIDATEWINDOW << 1)显示1号列表窗口.
(ISC_SHOWUICANDIDATEWINDOW << 2)显示2号列表窗口.
(ISC_SHOWUICANDIDATEWINDOW << 3)显示3号列表窗口.
2WM_IME_CONTROL 管理当前输入法

          wSubMessage= wParam;       WM_IME_CONTROL 控制的消息

lpData = (LPVOID) lParam;   

对应的数据

       

 

        

       

 

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

   2

 

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

       

 

   获取编码窗口位置 lParamCOMPOSITIONFORM结构地址。

 

     

 如果此消息成功返回0,否则非零。    通常如果你设计此部分了,返回0。否则返回1 4IMC_GETSOFTKBDFONT

 

       

 

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

 

  

wSubMessage= IMC_GETSOFTKBDSUBTYPE;

lParam = 0;

   7

       

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;

 

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

   

11IMC_SETSOFTKBDDATA

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

      

wSubMessage= IMC_SETSOFTKBDDATA;

lpSoftKbdData= (LPSOFTKBDDATA) lParam;

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

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

 

 

wSubMessage= IMC_SETSOFTKBDSUBTYPE;

lSubType= lParam;

     

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

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

 

 

wSubMessage= IMC_SETSOFTKBDFONT;

lpLogFont= (LPLOGFONT)lParam;

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

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

此时

       

     14IMC_SETSOFTKBDPOS
    13IMC_SETSOFTKBDFONT 设置软键盘字体, lParam传送的是LOGFONT结构地址 设置软件位置,此时 lParam传送的是POINTS结构

         wSubMessage= IMC_SETSOFTKBDPOS;

ptsPt= (POINTS)lParam;

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

 

wSubMessage= IMC_SETSTATUSWINDOWPOS;

ptsPt= (POINTS)lParam;

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

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

 

       

 

3WM_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替换结果串

 

      

wParam = 0

lParam= 0

 

       

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

          wParam = 0

lParam= 0

       

   6、

        

fSelect= (BOOL)wParam;   TRUE

hKL= lParam;    

         

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

 

        

wParam = 0

lParam= 0

 

          IME

wSubMessage= wParam;

lParam= lParam;

        

       8WM_IME_NOTIFY消息组:各消息说明:

 

          

wSubMessage = IMN_CLOSESTATUSWINDOW;

lParam= 0;

        

   2)

          

当用户接口窗口接收到此消息时,将关闭状态窗口。IMN_OPENSTATUSWINDOW产生或打开状态窗口

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

  

窗口接收此消息后 , 将销毁列表选择窗口    IMN_SETCONVERSIONMODE 改变输入法状态模式管理

          wSubMessage = IMN_SETCONVERSIONMODE;

lParam= 0;

IMN_SETOPENSTATUS

 

wSubMessage = IMN_SETOPENSTATUS;

lParam= 0;

IMN_SETCANDIDATEPOS

 

设置列表窗口位置

         wSubMessage = IMN_SETCANDIDATEPOS;

lCandidateList= lParam;

 设置编码窗口字体

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;

设置编码窗口

 

Parameters

IMN_SETCOMPOSITIONFONT

 

设置输入法状态

   

     5IMN_CLOSECANDIDATE
     4IMN_CHANGECANDIDATE 更新当前的列表选择窗口
有关状态串口的信息可用ImmGetConversionStatus获取,设置状态窗口的信息可用ImmSetConversionStatus.     3IMN_OPENCANDIDATE 打开或产生列表选择窗口
        1IMN_CLOSESTATUSWINDOW 关闭状态窗口时,系统发送 IMN_CLOSESTATUSWINDOW 消息。
       7WM_IME_STARTCOMPOSITION 当用户开始输入编码时,系统立即发送该消息到 IME 中, IME 打开编码窗口。
用户程序可以接受此消息,以便自己显示用户输入的编码。 WM_IME_SELECT 系统发出 WM_IME_SELECT 以便选择一个新的 ime 表示新的 IME 已选择, FALSE 表示不被选择或关闭该输入法。
      4WM_IME_COMPOSITIONFULL用户接口窗口不能增加编码窗口的尺寸时,ime用户接口窗口将发送WM_IME_COMPOSITIONFULL消息,可不处理。
    12IMC_SETSOFTKBDSUBTYPE 设置软键盘类型
设置软键盘数据,此时 lParam传送的是SOFTKBDDATA结构地址,用户设定自己的软键盘字符。
注意:UI窗口不接受此消息,它的管理函数是NotifyIME。IMC_SETCOMPOSITONWINDOW设置编码窗口属性,此时lParam传送的是COMPOSITIONFORM结构地址。
如果此消息成功返回 0 ,否则非零。 注意: UI 窗口不接受此消息,它的管理函数是 NotifyIME IMC_SETCOMPOSITONFONT 设置编码窗口的字体 . 此时 lParam传送的是LOGFONT结构地址。

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

 

IMC_GETSTATUSWINDOWPOS获取状态窗口位置

 

 

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

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

   6IMC_GETSOFTKBDSUBTYPE如果此消息成功返回0,否则非零。IMC_GETCOMPOSITONFONT
获取编码窗口字体结构, lParam LOGFONT 结构地址 其中子消息有下列消息:     1IMC_GETCANDIDATEPOS 获取列表窗口的位置 . 此时 lParam传送的是CANDIDATEFORM结构地址。 如果此消息成功返回 0 ,否则非零。

 

1、

 

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

 

case WM_IME_SETCONTEXT:
    fSet= (BOOL) wParam;

    lISCBits = lParam;

}

   

   

 

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值