MFC使用Windows 7在CListCtrl中使用Unicode和字体问题

我正在开发一个使用MFC的C ++应用程序,它需要能够处理Unicode字符。 每当我尝试查看CListCtrl中的Unicode字符时,它们总是显示为正方形,但在CEdit和CRichEdit中我可以看到它们很好。 我使用以下代码保存了一个我想要看到的文件列表:

bool CFileIO::writeStringToFile(CString str, CString filepath)
{
    FILE* outFile = _tfopen(filepath, _T("wb"));
    if(outFile == NULL)
    {
        return false;
    }

#ifdef _UNICODE
    int markerBits = 0xFEFF;
    fwrite(&markerBits, 2, 1, outFile);
#endif
    fwrite(str.GetBuffer(), sizeof(TCHAR), str.GetLength(), outFile);
    fclose(outFile);

    return true;
}

其中定义了_UNICODE,CString只是由换行符分隔的字符列表。 当我在Notepad ++中打开这个文件时,我无法查看Unicode字符(它们显示为正方形),但也是ASCII字符的字符显示得很好(这与我从CListCtrl获得的行为相同)。 由于我能够将方块复制粘贴到Google Chrome浏览器的搜索栏中,并且它们会在那里正确显示,所以我发现Notepad ++必须正确读取这些字符,但无法显示它们。 经过一些互联网调查后,我认为这个问题可能是一个字体问题,所以在Notepad ++中,我将字体更改为Arial Unicode MS,并且瞧! 有效! 我可以看到所有的Unicode字符(和ASCII字符)都很好。

所以我决定把我的CListCtrl的字体改为Arial Unicode MS,看看是否能解决这个问题(因为它可以用于Notepad ++),但是我有些疑惑,因为我所有的CListCtrl和CEdit的/ CRichEdit都使用相同的字体。 正如我担心的那样,更改字体并不会将Unicode字符从正方形改变(它们现在只是稍微不同的正方形)。

这里是踢球者:我在Windows 7上开发,我的客户端使用Windows XP。 他说他从未遇到过我曾经描述过的任何这些问题。 所以,我在我的电脑上安装了一个XP虚拟机,并且低调,它工作得很好。 XP和XP之间唯一的区别是,在Unicode上我可以想到的是,在XP上你必须明确地启用Unicode(并且我想安装一些额外的内容),而在7上它应该默认启用。

最后一件事:当我说它在XP中工作时,这并不完全准确。 即使大多数Unicode字符正确显示,仍然有一些在CListCtrl中显示为正方形(但是在XP中的Notepad ++中,并且在7中显示正确)。 我打印出它们的无符号字符值,只是为了看看它们是否溢出了TCHAR变量或其他东西。 它们都具有8212-8226范围内的值(不一定全面,只是我试图打印的范围)。 我不知道他们为什么不出现。

我一直在搜索互联网很长一段时间,我不知道这里发生了什么。 我能想到的唯一情况是它可能与我在一段时间内使用CRichEdit的问题类似(他们也没有将Unicode字符显示为正方形,所以我必须进入.rc文件并更改从“RichEdit”控制到“RichEdit20W”)。 但是我一直无法找到任何与CListCtrl相关的东西。 有没有人有任何关于MFC的见解,以及它如何处理Unicode可能会指向我的正确方向?

更新:遵循DavidK的建议(在下面的评论中),我创建了一个测试MFC应用程序,它只是一个包含CListCtrl的对话框。 开始时,它读取上述文件中的Unicode和ASCII字符组合,并且所有内容都正确显示(根本没有框)。 我回去跑原始程序,一切几乎都正常工作(在XP中不会显示的字符也显示为黑色框,但其他所有内容都正确显示)。 我将程序复制到单独的Windows 7机器(不是我的开发机器)并运行它。 我有和以前一样的问题(CListCtrl中的所有Unicode字符都是盒子)。 我应该提到,测试应用程序与主项目处于相同的解决方案,但我不确定这是否重要。

我将测试应用程序复制到我的非开发机器上,当我运行它时,它显示所有Unicode字符的框,与主机程序在该机器上执行的方式相同。 我很困惑。 我唯一的猜测是应用程序链接到不同的机器上的不同的DLL和/或机器上的字体有问题。

链接地址: http://www.djcxy.com/p/88671.html

上一篇: MFC issues with Unicode and fonts in CListCtrl using Windows 7

下一篇: Hindi language not displaying correctly on tcpdf