聊天功能在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
}
实现的效果: