如何在vb6中计算文本宽度

如何在vb6中计算文本宽度,vb6,Vb6,我知道有一种方法textwidth来计算字符串的文本宽度 但是我们有两个表单,它们有自己单独的列表框。但是我们要维护一个公共的.bas文件,它保存了它的代码 例如,让表单名称为form1和form2。宽度可以通过form1.TextWidthListBox.listi和form2.TextWidthListBox.listi计算 现在的问题是,由于我们为这两个项目维护一个公共bas文件,form2项目不知道form1是什么 给我提些建议,让我知道绳子的宽度 总的来说,我需要添加水平滚动条到列表框

我知道有一种方法textwidth来计算字符串的文本宽度

但是我们有两个表单,它们有自己单独的列表框。但是我们要维护一个公共的.bas文件,它保存了它的代码

例如,让表单名称为form1和form2。宽度可以通过form1.TextWidthListBox.listi和form2.TextWidthListBox.listi计算

现在的问题是,由于我们为这两个项目维护一个公共bas文件,form2项目不知道form1是什么

给我提些建议,让我知道绳子的宽度

总的来说,我需要添加水平滚动条到列表框,如果它超过了字符串的最大宽度。因此,如果maxwidth>listboxWidth,那么我将调用horizontalscroll bar方法来启用它。

这样做:
ListBox.Parent.TextWidthListBox.Listi

您将使用WINAPI函数启用水平滚动条,因此您不需要进行从像素到Twips的转换,对吗

您所需要的就是这样一个函数:

function StringWidth(pStr as string) as long
  dim sz as SIZE
  hdc=CreateCompatibleDC(0)
  oldFont=SelectObject(hdc,ifont.handle)
  call GetTextExtentPoint32 (hdc,pStr,len(pstr), sz)
  oldFont=SelectObject(hdc,oldFont)
  call DeleteDC(hdc)

  StringWidth=sz.cx
end function

当然,除非ListBox及其父项具有完全相同的字体设置,否则无法给出正确的结果。否则,这是显而易见的方法,如手册中的示例代码所示。