聊天功能在PC平台需要实现输入法跟随效果【EditBox有此效果,但是该控件不方便设置透明度,显示部分自定义图标不好实现】。
实现方案:采用TextField控件,每次输入文本时,根据已经输入文本的长度更新输入法位置。
核心代码如下:
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#include <Windows.h>
#pragma comment(lib, "Imm32.lib")
#endif // (CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
void HelloWorld::onTouchMoved(cocos2d::Touch* touch, cocos2d::Event* unused_event)
{
auto designSize = Director::getInstance()->getWinSize();
auto pos = touch->getLocation();
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
auto hwnd = Director::getInstance()->getOpenGLView()->getWin32Window();
HIMC hIMC = ImmGetContext(hwnd);
if (hIMC)
{
// Set composition window position near caret position
POINT point;
GetCaretPos(&point);
COMPOSITIONFORM Composition;
Composition.dwStyle = CFS_POINT;
Composition.ptCurrentPos.x = point.x+pos.x;
Composition.ptCurrentPos.y = point.y+(designSize.height-pos.y);
ImmSetCompositionWindow(hIMC, &Composition);
ImmReleaseContext(hwnd, hIMC);
}
#endif
}
实现的效果:

参考资料:https://blog.youkuaiyun.com/zzstack/article/details/50999177

这篇博客介绍了如何在Windows平台上使用Cocos2d-x为TextField控件实现输入法跟随输入位置的功能。通过获取输入法上下文并设置CompositionForm,确保输入法窗口随着文本长度变化而调整位置。代码示例展示了关键的Win32 API调用过程。
5万+

被折叠的 条评论
为什么被折叠?



