场景:
Win7简体中文 + VC2008英文版sp1下编写的SDI程序, 需要实现多语言切换和需要在多种语言的Windows系统下运行.问题:
Win7简体中文下, SDI程序可以运行, 放到Win7的英文系统下, CXXXApp::InitInstance中运行到ProcessShellCommand 就返回失败.
BOOL CXXXApp::InitInstance()
{
......
if (!ProcessShellCommand(cmdInfo)) // 返回失败
return FALSE;
......
}
解决思路:
1. 中文Win7可以, 英文Win7不可以, 第一时间想到是语言的问题.
2. 后来发现是资源语言设置问题.
3. Win7中文版 + VC2008英文版sp1 创建的SDI工程, 资源默认如下图一:
图一
4. 在这种情况下, 对话框资源上的控件, 输入中文, 编辑状态下可以正常显示, 但是运行时是问号来的, 看图二.
5. 修改对话框资源的语言为"进程默认语言", 运行时就可以正确显示中文了. 看图三.
6. 我看到既然对话框资源设为"进程默认语言"了, 所以我就把菜单, 工具栏等资源的语言也设为"进程默认语言", 当我编辑菜单/工具栏时, 输入了中文内容, 问题就出在这里, 此时资源自动产生了一个"String Table", 其语言并不是"English (U.S.)", 就是这个"String Table"使得ProcessShellCommand返回失败.