php获取手机ime,关于IME

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

总算弄明白怎么设置输入法的显示位置了!!

直接用ImmSetCompositionWindow就是了,不需要用ImmSetCandidateWindow

手动改掉SDL中WIN_SetTextInputRect的实现,就可以正常设置输入法的位置。

不过 状态栏 在全屏模式不能显示

原本 SDL是打算自己渲染候选列表及状态框什么的,

所以SetTextInputRect就鸡肋了,是设置了它自己的UI的位置,

同样的理由,它没把控制返回给操作系统,截获掉渲染任务。

然而 UI根本没加载成功,也就无法渲染成了,

我们就看不到输入法状态栏及候选列表之类的东西了。

videodata->ime_uiless = UILess_SetupSinks(videodata);

没成功初始化,

因为CoCreateInstance(&CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, &IID_ITfThreadMgrEx, (LPVOID *)&videodata->ime_threadmgrex)

这行create不成功。

综上

几乎不指望SDL能如我所愿了,它的目的与我想的不一样,它想自己控制输入的渲染。

但通过改源码已经可以达成目的

具体为:

IME_HandleMessage 最后行 return SDL_FALSE;

嘛其实还不太稳妥 如果你用了SDL_CreateWindowFrom 估计又会有某些影响

似乎还要改src\video\windows\SDL_windowsevents.c

好麻烦不管了 。

要SetTextInputRect能用的话

在WIN_SetTextInputRect中使用ImmSetCompositionWindow

大致是这样干:

RECT set_rect={rect->x,rect->y,rect->w,rect->h};

POINT pos={rect->x,rect->y};

COMPOSITIONFORM com_pos;

BOOL res=0;

com_pos.dwStyle=CFS_RECT;

com_pos.ptCurrentPos=pos;

com_pos.rcArea=set_rect;

res=ImmSetCompositionWindow(videodata->ime_himc,&com_pos);

if(res==0)按道理应该检查的,但WIN_SetTextInputRect根本没返回值,

嘛,其实可以把返回值扔进用户提供的那rect (逃...

//SDL打算自己渲染于是干脆利落的断定不会出错么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值