在我的应用程序中有一个按钮可以修改当前应用程序的输入法,但是我现在发了个消息:SendMessage(Application.Handle, WM_IME_CONTROL, IMC_OPENSTATUSWINDOW, 0);可是有的机器上不弹出输入法的小长方形的属性框,请问各位高手,还有什么方法可以设置这个东东的啊?

解决方案 »

  1.   

    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,否则非零。
      

  2.   

    现在用notify消息,效果更好,但在98系统下就出问题了,无法将输入法的小属性框取消,这是什么原因?