Option Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPrivate Sub Form_Load()
SetParent List1.hWnd, Frame1.Parent.hWnd
List1.Top = List1.Top + Frame1.Top
List1.Left = List1.Left + Frame1.Left
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetParent List1.hWnd, Frame1.hWnd
End Sub
SetParent VB声明
Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
说明
指定一个窗口的新父(在vb里使用:利用这个函数,vb可以多种形式支持子窗口。例如,可将控件从一个容器移至窗体中的另一个。用这个函数在窗体间移动控件是相当冒险的,但却不失为一个有效的办法。如真的这样做,请在关闭任何一个窗体之前,注意用SetParent将控件的父设回原来的那个)
返回值
Long,前一个父窗口的句柄
参数表
参数 类型及说明
hWndChild Long,子窗口的句柄
hWndNewParent Long,hWndChild的新父
注解
可用这个函数在运行期将vb控件置入容器控件内部(比如将一个按钮设成图象或窗体控件的子窗口),或者将控件从一个容器控件移至另一个。控件移至另一个父后,它的位置将由新父的坐标系统决定。这样一来,有必要重新规定控件的位置,使其能在目标位置显示出来
Top
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPrivate Sub Form_Load()
SetParent List1.hWnd, Frame1.Parent.hWnd
List1.Top = List1.Top + Frame1.Top
List1.Left = List1.Left + Frame1.Left
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetParent List1.hWnd, Frame1.hWnd
End Sub
SetParent VB声明
Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
说明
指定一个窗口的新父(在vb里使用:利用这个函数,vb可以多种形式支持子窗口。例如,可将控件从一个容器移至窗体中的另一个。用这个函数在窗体间移动控件是相当冒险的,但却不失为一个有效的办法。如真的这样做,请在关闭任何一个窗体之前,注意用SetParent将控件的父设回原来的那个)
返回值
Long,前一个父窗口的句柄
参数表
参数 类型及说明
hWndChild Long,子窗口的句柄
hWndNewParent Long,hWndChild的新父
注解
可用这个函数在运行期将vb控件置入容器控件内部(比如将一个按钮设成图象或窗体控件的子窗口),或者将控件从一个容器控件移至另一个。控件移至另一个父后,它的位置将由新父的坐标系统决定。这样一来,有必要重新规定控件的位置,使其能在目标位置显示出来
Top
Private Sub VSDate_Change() '卷动窗口,得到相应的位置
Dim k As Integer
k = VSDate.value
listbox.Top = 0 - listbox.Height * (自己设定)
End Sub
你那样做还是改变了大小,如果要移动listbox还要调用另外的api
有没有人知道CboBox是怎么实现的?当CboBox 放在容器内的时候,点击下拉的时候,List总是能够显示出来的。
e.g.,
SendMessage ListBox.hwnd, LB_SETHORIZONTALEXTENT, 800, 0
800就是宽度,最后的一定是0
那里有你说的类似的两个代码