Многие из вас знакомы с программой Microsoft Access, а кто-то даже занимался программированием приложений, связанных с базами данных. Вы наверное обратили внимание на необычные ListBox' ы при проектировании схемы данных:
Их можно перемещать по форме за заголовок, изменять их размеры. Хотите такие же?
Сделать такой ListBox можно изменив стиль окна. Стиль - это длинное целое число, представляющее собой логическую комбинацию различных флагов (именованных констант, устанавливающих нужный бит), которые определяют внешний вид и поведение окна. Получить это число можно с помощью функции GetWindowLong, а присвоить новый стиль - с помощью SetWindowLong. К существующему стилю мы добавим два новых флага - WS_CAPTION и WS_THICKFRAME, а надпись на заголовке зададим функцией SetWindowText.
Добавьте на форму элемент управления ListBox. В модуле формы, в секции Declarations, введите:
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" (ByVal hwnd As Long, _
ByVal lpString As String) As Long
Private Const GWL_STYLE = -16&
Private Const WS_CAPTION = &HC00000
Private Const WS_THICKFRAME = &H40000
В процедуру Form_Initialize введите такой код:
Private Sub Form_Initialize()
Dim lStyle As Long, strCaption As String
strCaption = "Необычный ListBox"
lStyle = GetWindowLong(List1.hwnd, GWL_STYLE)
lStyle = lStyle Or WS_CAPTION Or WS_THICKFRAME
SetWindowLong List1.hwnd, GWL_STYLE, lStyle
SetWindowText List1.hwnd, ByVal strCaption
End Sub
Запустите проект на выполнение. Забавный получился ListBox! Его можно двигать мышью, изменять размеры. Он похож на дочернее окно в MDI - приложениях.
Автор - Цзяофань
|