空格和字符的宽度应该是一样的吧 GetTextMetrics只能得到字符的平均宽度,而对于不同的字体,不同字符的宽度是不一样的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 GetTextExtent,得到英文字符(包括大小写)的总宽度然后除52,可以得到字符的平均宽度。 GetTextMetrics只是得到当前字体的平均值。使用GetTextExtentPoint32可以得到字符串的长度 只有少数几种字体是等宽度的大部分矢量字体的字符是不等宽的(尤其是英文)确定鼠标处字符,需要按特定的字符串进行计算,不能简单乘法如 hello008(paladin) 所言。 GetTextExtent计算的文本宽度是变化的,比如i和D的计算宽度是不一样的!所以使用GetTextMetrics来计算文本总长度是不正确的! 建议不要用GetTextMetrics取宽度,不准确,windows会自动缩进恩!用GetTextExtent 昨天网络出问题,上不来了,今天来看到这么多回复真高兴:),谢谢大家我用字符宽度是想通过它计算鼠标所在位置在视图中位于第几行,第几列。看了一下MSDN,GetTextMetrics好象是取字符串的宽度(对不?),可是我怎么得到LPCTSTR lpszString呢? "Fixedsys"字体LOGFONT lf;memset(&lf, 0, sizeof(LOGFONT));...lf.lfCharSet=GB2312_CHARSET;_tcscpy(lf.lfFaceName,_T("Fixedsys"));... 不好意思,小弟真是没办法了,老板下星期就要我交任务,问题贴出来已经两个星期了,就是找不到答案,所以真是sorry了,在这占用你们的空间,希望能给小弟一个答复!先谢谢了!!我用VC建了一个 以 CEditView 为基类的 MDI (其他什么代码也没写),当我打开一个*.asm时,想一行一行的读汇编代码,然后把它送计算机端口,请问我该怎么得到一行一行的代码?能把其中一些例子的代码贴出来更感谢!!或转到http://www.csdn.net/expert/topic/171/171611.shtm本人邮箱:[email protected] 这可真的奇怪了。我用的就是“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);从第五列开始就不对了 用GetTextExtentPoint得到一个字符串的确切长和宽 菜鸟求助!基于MFC多文档向View视图类传送数据问题 为什么运行到strcopy(com_str,"COM")会弹出Find source对话框? 这个怎么弄???? cstringarray怎么返回,只能内部使用? 关于VC++ 6.0Release版本的一个问题。 高手救我.一个ADO的问题! 请问如何在对话框里如何获得键盘按键消息? .dat,.cs类型数据文件,用什么工具打开.. 控件问题? 为什么我的单文档程序用到的MSCOMM的ActiveX的控件老是注册不上?我要做安装包 一般概念性问题 窗口最大化时如何让控件适应窗口
大部分矢量字体的字符是不等宽的(尤其是英文)
确定鼠标处字符,需要按特定的字符串进行计算,不能简单乘法
如 hello008(paladin) 所言。
所以使用GetTextMetrics来计算文本总长度是不正确的!
恩!用GetTextExtent
我用字符宽度是想通过它计算鼠标所在位置在视图中位于第几行,第几列。
看了一下MSDN,GetTextMetrics好象是取字符串的宽度(对不?),可是我怎么得到
LPCTSTR lpszString呢?
memset(&lf, 0, sizeof(LOGFONT));
...
lf.lfCharSet=GB2312_CHARSET;
_tcscpy(lf.lfFaceName,_T("Fixedsys"));
...
要我交任务,问题贴出来已经两个星期了,就是找不到答案,
所以真是sorry了,在这占用你们的空间,希望能给小弟一个答复!先谢谢了!!我用VC建了一个 以 CEditView 为基类的 MDI (其他什么代码也没写),当我打开一个*.asm时,想一行一行的读汇编代码,然后把它送计算机端口,请问我该怎么得到一行一行的代码?
能把其中一些例子的代码贴出来更感谢!!
或转到http://www.csdn.net/expert/topic/171/171611.shtm本人邮箱:[email protected]
每行显示的格式如下(*代表任意数字)******** - ** ** ** ** ** ** ** ** - ** ** ** ** ** ** ** ** ............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);从第五列开始就不对了