Среда, 29.01.2025, 12:11
Приветствую Вас Гость | RSSГлавная | Регистрация | Вход
Меню сайта
Категории раздела
Субклассирование элементов управления [3]
Приёмы субклассирования различных элементов управления для расширения их функциональных возможностей.
Вспомогательные функции [4]
Полезные советы, которые могут пригодиться во всех областях программирования
Мультимедиа [2]
Советы по работе над различными мультимедийными приложениями.
Необычные приложения [1]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Программирование на Visual Basic » Субклассирование элементов управления

Необычный ListBox

Многие из вас знакомы с программой 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
 
 'Заголовок для ListBox' а
 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 'Form_Initialize

Запустите проект на выполнение. Забавный получился ListBox! Его можно двигать мышью, изменять размеры. Он похож на дочернее окно в MDI - приложениях.

Автор - Цзяофань

Категория: Субклассирование элементов управления | Добавил: Xiaofang (12.06.2009)
Просмотров: 1708 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Форма входа
Поиск
Друзья сайта
Антология советской песни
Сайт управляется системой uCoz