字符串表就像一个Excel表格一样,存放了所有你放置的字符串。在这个表中,每一条字符串,都对应着一个ID宏、一个ID数值以及字符串本身。
    字符串表的使用,可以大大提高本土化的便利性。因为在程序中,我们不直接使用写好的字符串,而是从这个字符串表加载字符串资源。所以,在后期要进行多语言版本转化时,只需要把字符串表中的字符串翻译一下,然后,重新编译。这样程序就是另外一种语言的了,非常的方便,因此这个过程中不需要对代码中的字符进行修改,非常省心省力。
    默认情况下,MFC建立一个工程后,已经建立了一个字符串表[String Table]资源。如下图:

    然后,双击打开“String Table”,出现如下界面。这个字符串表就像EXCEL一样,直接编辑。


    编辑完后,保存此文件即可。
    下面就介绍如何在代码中使用字符串资源。

CString str;// - 声明并初始化一个CString对象实例
str.LoadString(IDS_MY_TIP_MSG);// - 使用CString类提供的LoadString函数加载字符串资源
MessageBox(str);// - 将字符串通过消息对话框显示出来

     以上是MFC的实现,非常简单易用。CString的LoadString函数只需要一个字符串资源的ID值即可。
    为了让读者了解的更加清楚,知道CString内部的实现,我们来看看Windows API的实现方式:

TCHAR tcMsg[255]=_T("");// - 声明并初始化一个字符数组
::LoadString(NULL,IDS_MY_TIP_MSG,tcMsg,255);// - 加载字符串
::MessageBox(NULL,tcMsg,_T("消息提示"),MB_OK);// - 显示字符串

    注意:
    1.TCHAR是MFC中的一个通用字符串类型, _T("")是将通用字符串宏,不清楚的可以阅读《宽字符串与窄字符串的相互转换》。 
    2.在LoadString和MessageBox前的::是作用域解析操作符。因此这里是在MFC环境下的,使用这个作用域解析操作符表示全局函数,即API函数,否则就是调用的MFC的函数。但是如果直接是Win32程序,则不需要这个作用域解析操作符。

    下面解释一下LoadString函数。代码段1是封装了API的LoadString实现的,所以有必要了解一下API的LoadString函数。
    LoadString的参数依次是:实例句柄,资源ID,字符串资源缓冲地址,字符串资源缓冲字节大小。
    如果是自己的程序,那么实例句柄设置为空,如果是使用其他程序的资源,使用其他程序的进程实例句柄,这里就不讨论其他程序的。资源ID就是字符串表中的字符串对应的ID。缓冲地址是LPTSTR类型的,使用TCHAR数组即可。大小则设置为数组的大小,按照字节数计算。
    如果函数执行成功,则返回得到的从字符串表中加载到缓冲的TCHAR字符个数,不包括空字符。如果字符串资源不存在则返回0.