注意:这可能是一个在黑暗中拍摄,它纯粹出于好奇心,我问。VB6 ImageList Frm代码生成
当使用来自Microsoft公共控制库(mscomctl.ocx)的ImageList控件时,我发现VB6生成的FRM代码无法解析为真实的属性/方法名称,我很好奇如何解析制作。所生成的FRM代码的一个例子在下面给出用含3个图像一个ImageList:
Begin MSComctlLib.ImageList ImageList1
BackColor = -2147483643
ImageWidth = 100
ImageHeight = 45
MaskColor = 12632256
BeginProperty Images {2C247F25-8591-11D1-B16A-00C0F0283628}
NumListImages = 3
BeginProperty ListImage1 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "Form1.frx":0054
Key = ""
EndProperty
BeginProperty ListImage2 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "Form1.frx":3562
Key = ""
EndProperty
BeginProperty ListImage3 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "Form1.frx":6A70
Key = ""
EndProperty
EndProperty
End
从我的经验,一BeginProperty标签通常是指一个化合物属性(一个对象)被分配到诸如字体对象例如:
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 10950
ClientLeft = 60
ClientTop = 450
ClientWidth = 7215
BeginProperty Font
Name = "MS Serif"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = -1 'True
Strikethrough = 0 'False
EndProperty
End
可以很容易地看到解析为VB.Form.Font。 <房源名称>。
使用ImageList,没有名为Images的属性。与属性Images关联的GUID表示实现接口IImages的类型ListImages。这种类型是有道理的,因为ImageList控件具有一个名为ListImages的属性,它的类型为IImages。其次,类型IImages中不存在属性ListImage1,ListImage2和ListImage3,但与这些属性关联的GUID表示实现接口IImage的ListImage类型。这种类型也是有道理的,因为IImages实际上是IImage的集合。
对我来说没有意义的是VB6如何使这些关联。 VB6如何知道名称图像 - > ListImages之间的关联纯粹是因为关联类型(由GUID提供) - 也许是因为它是该类型的唯一属性?其次,它如何将ListImage1,ListImage2和ListImage3解析为集合IImages的添加,并且它是否使用Add方法?或者可能是ControlDefault属性?
也许VB6具有此控件的特定知识,并且不存在逻辑分辨率?
+1。它全部记录在VB6手册中关于创作您自己的控件的部分。它建议你“应该在财产包中使用财产的名称,因为它会出现在frm文本文件中,并且可能会被控制的用户看到”,但是你并没有被迫这么做。相同的原则适用于使用其他编程语言编写的COM控件。 http://msdn.microsoft.com/en-us/library/aa261321(v=VS.60).aspx – MarkJ 2010-03-23 13:46:17
@MarkJ:完美,感谢您的额外信息 – DAC 2010-04-02 10:57:05