在使用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;
}
```