|
|

楼主 |
发表于 2008-5-30 13:59:00
|
显示全部楼层
Re: 请问如何获得字符串的尺寸?
问题解决!感谢系统崩溃的方法,自己还研究了加了一些改善的东西,得出来的结果与VB6中TextWidth的结果是一样的,好东西不敢独享,拿出来给大家看下~我写成了个函数,以方便使用,大家也都可以复制,直接使用了~代码中有详尽的注释
Public Function GetStringSize(ByVal vText As String, ByRef vFont As Font) As Size
'待测量的字符串
Dim S As String = vText
'待测量的字体
Dim f As Font = vFont
'通过默认编码获取字符串长度,这种编码是半角一个字符,全角两个字符,只有这样才符合要求
Dim l As Integer = Encoding.Default.GetBytes(S).Length
'声明设备上下文
Dim DC As Integer = GetWindowDC(Me.ActiveForm.Handle.ToInt32)
'将字体句柄传入系统
SelectObject(DC, f.ToHfont.ToInt32)
'准备传址的参数,字体尺寸将被保存在该尺寸中
Dim mySize As Size
'通过GetTextExtentPoint32函数获取尺寸
GetTextExtentPoint32(DC, S, l, mySize)
'释放设备上下文
ReleaseDC(Me.ActiveForm.Handle.ToInt32, DC)
'返回变量
Return mySize
End Function
需要使用到的API在下面:
Private Declare Function GetWindowDC Lib "user32" Alias "GetWindowDC" (ByVal hwnd As Integer) As Integer
Private Declare Function GetTextExtentPoint32& Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Integer, ByVal lpsz As String, ByVal cbString As Integer, ByRef lpSize As Size)
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Integer, ByVal hdc As Integer) As Integer
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Integer, ByVal hObject As Integer) As Integer
截图里面有与VB6的对比结果,果然一样~ |
-
|