1. DrawText 수정
cocos2d project에 Source files -> platform -> win32 -> CCDevice-win32.cpp
Line 334를 보면 아래와 같은 코드가 있습니다.
nLen = MultiByteToWideChar(CP_UTF8, 0, pszText, nLen, pwszBuffer, nBufLen);
CP_UTF8을 CP_ACP로 바꿔주면 됩니다.
nLen = MultiByteToWideChar(CP_ACP, 0, pszText, nLen, pwszBuffer, nBufLen);
2. UIEditBox 수정
cocos2d -> Source files -> ui -> UIEditorBox -> UIEditorBoxImpl-win32.cpp
Line 372로 이동해서 EditBoxImplWin::getText() 함수 부분을 아래 코드로 변경합니다.
std::string MBFromW(LPCWSTR pwsz, UINT cp) {
int cch = WideCharToMultiByte(cp, 0, pwsz, -1, 0, 0, NULL, NULL);
char* psz = new char[cch];
WideCharToMultiByte(cp, 0, pwsz, -1, psz, cch, NULL, NULL);
std::string st(psz);
delete[] psz;
return st;
}
std::string EditBoxImplWin::getText() const
{
std::u16string wstrResult;
std::string utf8Result;
int inputLength = ::GetWindowTextLengthW(_hwndEdit);
wstrResult.resize(inputLength);
::GetWindowTextW(_hwndEdit, (LPWSTR)&wstrResult[0], inputLength + 1);
utf8Result = MBFromW((LPWSTR)&wstrResult[0], CP_ACP);
//bool conversionResult = cocos2d::StringUtils::UTF16ToUTF8(wstrResult, utf8Result);
//if (!conversionResult)
//{
// CCLOG("warning, editbox input text conversion error.");
//}
return std::move(utf8Result);
}
이렇게 두 부분만 수정해주면 윈도우에서 한글을 깨지지 않은 상태로 입출력 할 수 있습니다.
'Development > Cocos2d-x' 카테고리의 다른 글
[COCOS2D-X] 2.x.x 버전으로 개발된 소스코드 최신버젼(4.0.x) 적용하기 Part2 (0) | 2023.03.11 |
---|---|
[COCOS2D-X] 2.x.x 버전으로 개발된 소스코드 최신버젼(4.0.x) 적용하기 Part1 (2) | 2023.03.06 |