[Cocos2d-x] v3.17.2 윈도우에서 한글 깨져서 보일 때 해결 방법

 

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);
    }

 

이렇게 두 부분만 수정해주면 윈도우에서 한글을 깨지지 않은 상태로 입출력 할 수 있습니다.