# cocos2dx-windows编辑框扩展 **Repository Path**: xingbboy/ocos2dx-TextFieldTTF-win32 ## Basic Information - **Project Name**: cocos2dx-windows编辑框扩展 - **Description**: cocos2dx-windows编辑框扩展,对应版本3.17.2 全屏输入法,选择,复制粘贴 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-04 - **Last Updated**: 2023-02-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cocos2dx-windows编辑框扩展 #### 介绍 cocos2dx-windows编辑框扩展,对应版本3.17.2 全屏输入法,选择,复制粘贴 #### 使用说明 覆盖文件后 修改下面代码 #### CCGLViewImpl-desktop.cpp文件修改 ~~~c++ if (GLFW_RELEASE != action) { switch (g_keyCodeMap[key]) { case EventKeyboard::KeyCode::KEY_BACKSPACE: ret |= IMEDispatcher::sharedDispatcher()->dispatchDeleteBackward(); break; case EventKeyboard::KeyCode::KEY_HOME: case EventKeyboard::KeyCode::KEY_KP_HOME: case EventKeyboard::KeyCode::KEY_DELETE: case EventKeyboard::KeyCode::KEY_KP_DELETE: case EventKeyboard::KeyCode::KEY_END: case EventKeyboard::KeyCode::KEY_LEFT_ARROW: case EventKeyboard::KeyCode::KEY_RIGHT_ARROW: case EventKeyboard::KeyCode::KEY_ESCAPE: ret |= IMEDispatcher::sharedDispatcher()->dispatchControlKey(g_keyCodeMap[key], mods); break; case EventKeyboard::KeyCode::KEY_C: if (mods == GLFW_MOD_CONTROL) { ret = IMEDispatcher::sharedDispatcher()->isAnyDelegateAttachedWithIME(); if (ret) { //复制 std::string str = IMEDispatcher::sharedDispatcher()->getSelectContentText(); if (str.empty()) { break; } if (OpenClipboard(0)) { std::wstring wstr = cocos2d::StringUtf8ToWideChar(str); if (wstr.empty()) { break; } HGLOBAL hmem = NULL; int len = (wstr.length() + 1) * sizeof(wchar_t); hmem = GlobalAlloc(GHND, len); if (hmem) { EmptyClipboard(); char* pmem = (char*)GlobalLock(hmem); if (pmem) { memcpy(pmem, wstr.c_str(), len); // SetClipboardData() SetClipboardData(CF_UNICODETEXT, hmem); } GlobalUnlock(hmem); } CloseClipboard(); } } } break; case EventKeyboard::KeyCode::KEY_V: if (mods == GLFW_MOD_CONTROL) { ret = IMEDispatcher::sharedDispatcher()->isAnyDelegateAttachedWithIME(); if (ret) { //粘贴 if (OpenClipboard(0)) { std::string str; HANDLE h = GetClipboardData(CF_UNICODETEXT); if (h != INVALID_HANDLE_VALUE) { WCHAR* buffer = (WCHAR*)GlobalLock(h); if (buffer) { str = cocos2d::StringWideCharToUtf8(buffer); } GlobalUnlock(h); } CloseClipboard(); if (!str.empty()) { ret |= IMEDispatcher::sharedDispatcher()->dispatchInsertText(str.c_str(), str.length()); } } } } break; default: break; } } ~~~ #### 窗口wnd函数添加消息 ~~~c++ case WM_IME_STARTCOMPOSITION: case WM_IME_ENDCOMPOSITION: case WM_IME_COMPOSITION: case WM_IME_SETCONTEXT: case WM_IME_NOTIFY: case WM_IME_CONTROL: case WM_IME_COMPOSITIONFULL: case WM_IME_SELECT: case WM_IME_CHAR: case WM_IME_REQUEST: case WM_IME_KEYDOWN: case WM_IME_KEYUP: { if (cocos2d::IMMImpl::sharedDispatcher()->ImmMessage(hWnd, uMsg, wParam, lParam)>=0) { return 0; } break; } ~~~