用GetTextExtentPoint32和GETTEXTMETRICS都只对英文字符识别比较精确,但对宽字符来说差距都满大的,怎么办呢?

解决方案 »

  1.   

    附加一个问题:能不能判断一个字符串是宽的还是窄的?我在vc6里面调试的时候,发现quick watch可以认出中文字符串的。比较不可思议
      

  2.   

    汉字占两个字节,汉字的第一个字节大于128
    对于一个非UNICODE字符串,从头开始扫描,如果发现某个字节大于128,则这个字节和它的下一个字节即组成一个汉字
      

  3.   

    建议把工程设置为Unicode Set。这样所有的字符串都是占用2个字节。就好处理了。
    引入TCHAR,
    例如:CString str = _T("VS2005工程");
    则字符串的个数就是count = sizeof(str)/sizeof(TCHAR);
    或者count = sizeof(str)/sizeof(wchar_t);
    或者就是:count = strlen(str);
      

  4.   

    哦,这样,谢谢baojian88888(机器人)
    我想知道你是怎么取得一个中文字符串的宽度的呢?
    我是这样的。
    把字符串放在char数组里,然后就用GetTextExtentPoint32得到其宽度,这样是不是哪里有问题?
      

  5.   

    先用SelectObject把字体选进DC,再用GetTextExtentPoint32取得当前字体下字符串的长度(像素)
      

  6.   

    GetTextExtentPoint32和是不是宽字符没有关系,是根据DC中的字体和实际内容来的。
      

  7.   

    GetTextExtentPoint32非常之不准。
    需要准确计算的时候,我都是自己算的。nSize : 字体大小
    int nW = (int)(nSize / 2); // 一个英文字符的宽度
    int nW =  nSize ;// 汉字或特殊字符这样还是比较准的