关于cocos2d::MessageBox的Bug

在使用cocos2d::MessageBox时,弹出的消息框并未锁定主窗口,从而导致主窗口还能继续工作的Bug,因此在发布WindowsPC版本这个问题就严重影响程序稳定性。
查看源码发现:

void MessageBox(const char * pszMsg, const char * pszTitle)
{
    MessageBoxA(NULL, pszMsg, pszTitle, MB_OK);
}


```


这里的第1个参数为NULL导致的主窗口不被锁定,所以应该改成WindowFromDC(wglGetCurrentDC()),获取OpenGL主窗口并锁定以防止出现Bug。
另外Cocos2D-X中是使用UTF-8编码字符串,在这里发现使用UTF-8字符串时出现中文乱码,所以这不应该使用MessageBoxA(它是使用ANSI编码的),应该用MultiByteToWideChar把UTF-8编码转成Unicode再调用MessageBoxW函数输出(以保证快平台兼容性)。
void MessageBox(const char * pszMsg, const char * pszTitle)
{
    int bufflen = MultiByteToWideChar(CP_UTF8, 0, pszMsg, -1, NULL, 0) + 1;
    WCHAR* widebuff = new WCHAR;
    MultiByteToWideChar(CP_UTF8, 0, pszMsg, -1, widebuff, bufflen);
 
    int bufflen2 = MultiByteToWideChar(CP_UTF8, 0, pszMsg, -1, NULL, 0) + 1;
    WCHAR* widebuff2 = new WCHAR;
    MultiByteToWideChar(CP_UTF8, 0, pszTitle, -1, widebuff2, bufflen2);

    MessageBoxW(WindowFromDC(wglGetCurrentDC()), widebuff, widebuff2, MB_OK);

    delete] widebuff;
    delete] widebuff2;
}


```

32个赞 啊…试了一下. 不在乱码了

不错!

您可以直接向Cocos2d-x github仓库发送PR。

具体操作可见:http://www.cocos2d-x.org/wiki/How_to_Contribute