GetTextMetrics只能得到字符的平均宽度,而对于不同的字体,不同字符的宽度是不一样的

解决方案 »

  1.   

    GetTextExtent,得到英文字符(包括大小写)的总宽度然后除52,可以得到字符的平均宽度。
      

  2.   

    GetTextMetrics只是得到当前字体的平均值。使用GetTextExtentPoint32可以得到字符串的长度
      

  3.   

    只有少数几种字体是等宽度的
    大部分矢量字体的字符是不等宽的(尤其是英文)
    确定鼠标处字符,需要按特定的字符串进行计算,不能简单乘法
    如 hello008(paladin) 所言。
      

  4.   

    GetTextExtent计算的文本宽度是变化的,比如i和D的计算宽度是不一样的!
    所以使用GetTextMetrics来计算文本总长度是不正确的!
      

  5.   

    建议不要用GetTextMetrics取宽度,不准确,windows会自动缩进
    恩!用GetTextExtent
      

  6.   

    昨天网络出问题,上不来了,今天来看到这么多回复真高兴:),谢谢大家
    我用字符宽度是想通过它计算鼠标所在位置在视图中位于第几行,第几列。
    看了一下MSDN,GetTextMetrics好象是取字符串的宽度(对不?),可是我怎么得到
    LPCTSTR lpszString呢?
      

  7.   

    "Fixedsys"字体LOGFONT    lf;
    memset(&lf, 0, sizeof(LOGFONT));
    ...
    lf.lfCharSet=GB2312_CHARSET;
    _tcscpy(lf.lfFaceName,_T("Fixedsys"));
    ...
      

  8.   

    不好意思,小弟真是没办法了,老板下星期就
    要我交任务,问题贴出来已经两个星期了,就是找不到答案,
    所以真是sorry了,在这占用你们的空间,希望能给小弟一个答复!先谢谢了!!我用VC建了一个 以 CEditView 为基类的 MDI (其他什么代码也没写),当我打开一个*.asm时,想一行一行的读汇编代码,然后把它送计算机端口,请问我该怎么得到一行一行的代码?
    能把其中一些例子的代码贴出来更感谢!!
    或转到http://www.csdn.net/expert/topic/171/171611.shtm本人邮箱:[email protected]
      

  9.   

    这可真的奇怪了。我用的就是“Fixedsys”啊。算错了?谁帮我看看,谢谢了
    每行显示的格式如下(*代表任意数字)******** - ** ** ** ** ** ** ** ** - ** ** ** ** ** ** ** **  ............x,y 代表鼠标所在位置的坐标
    LPTEXTMETRIC rm;
    pMyDC->GetTextMetrics(rm);
    LONG nWidth = rm->tmAveCharWidth;
    int volumn; //中间的十六个数字,假设每个(两个*加一空格)为一列,欲计算鼠标在哪一列
    if( (x> (nWidth*11))&&(x<nWidth*35) )//前八列
    volumn = (x+nWidth-(nWidth*11))/(nWidth*3)-1;
    else if((x>nWidth*38)&&(x<nWidth*62))
    volumn = (x+nWidth-nWidth*11)/(nWidth*3);从第五列开始就不对了
      

  10.   

    用GetTextExtentPoint得到一个字符串的确切长和宽