一直都有这样的需求:
要将列表中的元素按照名称进行排序,顺序大概是:数字-》字母-》中文,中文则要按照汉语拼音来排序。
之前的程序一直在非Unicode下面运行,使用stl中的sort函数结合strcmp来处理即可实现排序。后面我们的程序进行了Unicode改造,strcmp只适用于ASCII窄字节字符的处理,宽字节则无能为力了。经搜索发现,微软给我们提供了支持Unicode字符操作的lstrcmp函数,进而能实现我们的需求。
函数strcmp是作为对Windows 函数CompareString 的调用来实现的。
int CompareString(
LCID lcid,
DWORD fdwStyle,
PCWSTR pString1,
int cch1,
PCTSTR pString2,
int cch2);
该函数对两个Unicode字符串进行比较。CompareString 的第一个参数用于设定语言ID(LCID),这是个3 2 位值,用于标识一种特定的语言。CompareString 使用这个LCID 来比较这两个字符串,方法是对照一种特定的语言来查看它们的字符的含义。这种操作方法比C 运行期函数简单地进行数值比较更有意义。当lstrcmp 函数系列中的任何一个函数调用CompareString 时,该函数便将调用Windows 的GetThreadLocale 函数的结果作为第一个参数来传递。