gettextextentpoint32函数是用来计算字符串的宽度和高度,而且它说是以TWIP为单位的,但是我用之后发现好象不对,一排汉字才几百的数值,很显然不是以twip为单位的。那么它的宽度和高度究竟计算的是什么呢??
有没有用过的人帮忙解答一下啊,非常紧急啊!up 有分!!
有没有用过的人帮忙解答一下啊,非常紧急啊!up 有分!!
解决方案 »
- vb内存溢出问题
- 如何取得汉字的GBK码???又如何由GBK码转换成对应的汉字???
- VBA在后台写一个Excel文件的同时打开另外一个Excel文件就会出错,是怎么回事?
- 水晶报表问题
- 为什么报表在win98下正常在win2000下却超长了?有经验者给提提办法。
- MDI窗体编程中,如何实现在子窗体中调用父窗体中的控件。。放分!!!
- 关于制作安装程序的问题。
- 请问:在DataReport的detail中定义了image控件,但是在code环境中,无法使用该image控件?
- 怎样把image.picture设为none?
- 请问如何把其他程序放在Windows系统栏里的图标删除?
- Adodc1与access连接后 怎么样断开连接啊
- 关于VB 的ACTIVEX 实现安全接口遇到的问题
Dim szText As Size
GetTextExtentPoint32 dhDC, Text, lstrlen(Text), szText
w = szText.cx
h = szText.cy
GetTextExtentPoint32是根据传入参数hdc中的字体,计算描绘字符串所需的宽与高若传入的是richtextbox的hdc,那算出的就是用该dc中的当前字体,单行描绘text这么多文本实际所需宽与高的像素数,不同dc中,若字体设置不同,对同一文本计算出的宽与高也会不一样。
比如我测试字符串宽度时:做实验如下:输入一个我字,得宽度s.cx等于8,两个我字时宽度s.cx=15,三个时甚至是s.cx=19........我不知道是怎么回事。还有,当我用字母做实验时,输入一个a,得宽度8,然后输入几个a,就是几个8的宽度。但是我输入f时,得宽度为4。但是很明显他们的宽度是一样的,因为我直接分两行写a和f,个数一样则宽度一样。
迷茫ing........
高手:homezj(小吉) ---你能不能加我QQ啊,我想请教你问题,在这上面等太慢了,好郁闷啊。我的QQ是249033427(花开不败)。
或者我加你也可以啊,你下次发言时留下QQ好吗??
谢谢!!!!
1、错的是:一个“我”字,宽度只有8,可能是你传入的字符串长度不对所至,正确的字符串长度应该用API函数lstrlen测得,它是ANSI编码字节长度。“我”字为2,而"a"为1,而VB是Uncode,若用VB的Len则都是1,若用LenB,则都是2。2、对的是:“a”与“f”不一样,与hdc中使用的是非等宽字体有关。richtextbox与TextBox一样都没有hdc属性,为什么没有,因为它们的文本输出,都是在自己类中维护的后台hdc中进行,在描绘完成后才复制到前台输出,你可能是用GetDC取得richtextbox的前台hdc,这个dc与文本输出的hdc并不一样,它一般根本就不选入字体,所以使用的是默认的System字体,这正是一种非等宽字体,字母“a”的宽度一般是字母“f”、“i”、“l”等的两倍!前贴中说过,
“GetTextExtentPoint32是根据传入参数hdc中的字体,计算描绘字符串所需的宽与高”所以在文本类控件中测字符描绘宽与高,与PictureBox或Form中不一样。一般需另建一个dc,并在新DC中选入与文本类控件当前一样的字体后,再测。
这是正常的步骤,日常使用中,使用GetTextExtentPoint32前,也都是先选入字体,再测的。若不新建DC,在GetDC取得的hdc中直接选入字体,似乎也可以,不过我没试过,因为我做图形界面时一般都用自己的DC。
而且我用你所说的,用lstrlen来测量长度是,现在有几个我字它的总宽度就是15的几倍。但是字母仍然不变,应该是你说的字体的原因,还有dc不对。
------------------------------------------------------------------------------------
所以在文本类控件中测字符描绘宽与高,与PictureBox或Form中不一样。一般需另建一个dc,并在新DC中选入与文本类控件当前一样的字体后,再测。
这是正常的步骤,日常使用中,使用GetTextExtentPoint32前,也都是先选入字体,再测的。
------------------------------------------------------------------------------------
里面说到要自己建dc,还有选入字体,怎么弄的,我不是很清楚。
我是一个菜鸟,问题都很幼稚。望不吝赐教!
再一个你怎么不留下你的QQ啊,我好象加你。那样问得清楚一些啊!!
55555555555555.........
在论坛中讨论也有好处,也许还有更多人可以帮你。API处理文本当然离不开使用字体,所以你必须先学一下LogFont结构,在MSDN或网上搜一下它,会找到很多示例。一般来说,中文字体(如:宋体)多是等宽字体,英文字体多为非等宽字体。等宽字体很好算,每个汉字宽度是一样,高与宽相等,英文宽度正好又为中文的一半,所以有时可以简单按字符串字节数得出总描绘宽度,如:宋体9号(小五)字,汉字都是12X12像素,英文都是6X12像素。怎么使用字体,我以前写过一个文本输出函数,其中有LogFont的简单用法,你可参考:
http://blog.csdn.net/homezj/archive/2005/04/15/349665.aspx