cocos2dx 3.2 解决输入框(TextField,TextFieldTTF) 中文乱码问题
2014-08-20 21:03
573 查看
最近开发cocos2dx 项目,做一个小游戏。(个人喜欢用最新版本)
没系统学习就是问题多多,遇到了很多问题,比如所有的opengl api都必须在主线程中调用,
这让我在多线程加载方面吃了不少亏,浪费了很多时间。
这次遇到了输入框中输入中文出现乱码问题。搜索了很多方法,都没找到。没办法。但是知道cocos2dx 2.x版本没有这个问题,所以就只有跟进代码了。
首先 找到2.x中找到WM_CHAR的派发消息:
在platform/win32/下的CCEGLView.cpp
中 LRESULT CCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)里面可以找到,
不说了,直接贴代码:
如上:最重要的出现了,
在这里我们可以依稀看到,中文乱码处理方式:
好了,进入我们3.2版本里面:
首先看主注册消息事件开始处:
在GLView::initWithRect中:
glfwSetMouseButtonCallback(_mainWindow,
GLFWEventHandler::onGLFWMouseCallBack);
glfwSetCursorPosCallback(_mainWindow, GLFWEventHandler::onGLFWMouseMoveCallBack);
glfwSetScrollCallback(_mainWindow, GLFWEventHandler::onGLFWMouseScrollCallback);
glfwSetCharCallback(_mainWindow, GLFWEventHandler::onGLFWCharCallback);
glfwSetKeyCallback(_mainWindow, GLFWEventHandler::onGLFWKeyCallback);
glfwSetWindowPosCallback(_mainWindow, GLFWEventHandler::onGLFWWindowPosCallback);
glfwSetFramebufferSizeCallback(_mainWindow, GLFWEventHandler::onGLFWframebuffersize);
glfwSetWindowSizeCallback(_mainWindow, GLFWEventHandler::onGLFWWindowSizeFunCallback);
上面红色就是我们想要的:
进入GLFWEventHandler::onGLFWCharCallback,在跟进: _view->onGLFWCharCallback(window,
character);
是不是跟2.x 里有相似地方呢?
对,我们就使用2.x
来处理中文乱码问题,废话不多说,直接看结果
ok,完成!就是这么简单,现在可以试下了,支持中文输入法(主要用于windows平台)
其实就一步:在3.x中收索
GLView::onGLFWCharCallback
然后添加以上函数内容,即搞定。
学习交流!!!紧供参考
没系统学习就是问题多多,遇到了很多问题,比如所有的opengl api都必须在主线程中调用,
这让我在多线程加载方面吃了不少亏,浪费了很多时间。
这次遇到了输入框中输入中文出现乱码问题。搜索了很多方法,都没找到。没办法。但是知道cocos2dx 2.x版本没有这个问题,所以就只有跟进代码了。
首先 找到2.x中找到WM_CHAR的派发消息:
在platform/win32/下的CCEGLView.cpp
中 LRESULT CCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)里面可以找到,
不说了,直接贴代码:
case WM_CHAR: { if (wParam < 0x20) { if (VK_BACK == wParam) { CCIMEDispatcher::sharedDispatcher()->dispatchDeleteBackward(); } else if (VK_RETURN == wParam) { CCIMEDispatcher::sharedDispatcher()->dispatchInsertText("\n", 1); } else if (VK_TAB == wParam) { // tab input } else if (VK_ESCAPE == wParam) { // ESC input //CCDirector::sharedDirector()->end(); } } else if (wParam < 128) { // ascii char CCIMEDispatcher::sharedDispatcher()->dispatchInsertText((const char *)&wParam, 1); } else { char szUtf8[8] = {0}; int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&wParam, 1, szUtf8, sizeof(szUtf8), NULL, NULL); CCIMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen); } if ( m_lpfnAccelerometerKeyHook!=NULL ) { (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam ); } } break;
如上:最重要的出现了,
else if (wParam < 128) { // ascii char CCIMEDispatcher::sharedDispatcher()->dispatchInsertText((const char *)&wParam, 1); } else { char szUtf8[8] = {0}; int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&wParam, 1, szUtf8, sizeof(szUtf8), NULL, NULL); CCIMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen); }
在这里我们可以依稀看到,中文乱码处理方式:
好了,进入我们3.2版本里面:
首先看主注册消息事件开始处:
在GLView::initWithRect中:
glfwSetMouseButtonCallback(_mainWindow,
GLFWEventHandler::onGLFWMouseCallBack);
glfwSetCursorPosCallback(_mainWindow, GLFWEventHandler::onGLFWMouseMoveCallBack);
glfwSetScrollCallback(_mainWindow, GLFWEventHandler::onGLFWMouseScrollCallback);
glfwSetCharCallback(_mainWindow, GLFWEventHandler::onGLFWCharCallback);
glfwSetKeyCallback(_mainWindow, GLFWEventHandler::onGLFWKeyCallback);
glfwSetWindowPosCallback(_mainWindow, GLFWEventHandler::onGLFWWindowPosCallback);
glfwSetFramebufferSizeCallback(_mainWindow, GLFWEventHandler::onGLFWframebuffersize);
glfwSetWindowSizeCallback(_mainWindow, GLFWEventHandler::onGLFWWindowSizeFunCallback);
上面红色就是我们想要的:
进入GLFWEventHandler::onGLFWCharCallback,在跟进: _view->onGLFWCharCallback(window,
character);
ok:我们进入最关键地点:直接贴代码:
void GLView::onGLFWCharCallback(GLFWwindow *window, unsigned int character) { IMEDispatcher::sharedDispatcher()->dispatchInsertText((const char*)&character, 1); }
是不是跟2.x 里有相似地方呢?
对,我们就使用2.x
来处理中文乱码问题,废话不多说,直接看结果
void GLView::onGLFWCharCallback(GLFWwindow *window, unsigned int character) { if (character < 128) IMEDispatcher::sharedDispatcher()->dispatchInsertText((const char*)&character, 1); else { char szUtf8[8] = { 0 }; int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&character, 1, szUtf8, sizeof(szUtf8), NULL, NULL); IMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen); } }
ok,完成!就是这么简单,现在可以试下了,支持中文输入法(主要用于windows平台)
其实就一步:在3.x中收索
GLView::onGLFWCharCallback
然后添加以上函数内容,即搞定。
学习交流!!!紧供参考
相关文章推荐
- cocos2dx 3.2 解决输入框(TextField,TextFieldTTF) 中文乱码问题
- cocos2dx 3.x 解决输入框(TextField,TextFieldTTF) 输入中文变乱码的问题
- 解决cocos2dx中直接输入中文乱码的问题
- Flash的输入框TextField无法输入中文的问题
- 49 Three.js使用THREE.TextGeometry创建三维文本解决中文乱码的问题
- 解决CCLabelTTF中文乱码的问题
- cocos2d-x 3.2 在window平台vs2012下解决中文乱码问题
- linux 下解决sublime text 的中文显示乱码与输入问题
- cocos2dx : 解决中文乱码问题
- 【独立开发者er Cocos2d-x实战 010】Cocos2dx 中文乱码问题解决
- 小技巧-cocos2dx中在win32和android下解决中文乱码的问题。
- web服务器的Content-Type为text/plain时返回出现中文乱码问题解决
- cocos2d-x 3.2 在window平台vs2012下解决中文乱码问题
- 安装fcitx中文输入法(fcitx4.0.1版本和fcitx3.6.3版本),解决输入框乱码问题
- cocos2dx3.2 使用SimpleAudioEngine时不能播放音频解决办法(中文路径问题)
- cocos2d-x 3.2 LabelTTF 解决中文乱码
- Jfreechart 中文乱码问题的解决及zysong.ttf下载
- SSH Secure Shell 3.2 连接 CentOS7 解决中文乱码的问题
- 解决tomcat下的中文提交乱码的问题!有效!
- struts中文乱码问题解决