Пуск -> Программы -> Microsoft Visual Studio 6.0 -> Microsoft Visual Studio 6.0 Tools -> Spy++
Спасибо. Буду разбираться.
Я почему этой темой заинтересовался. Мне нужно ToolBar сделать как в IE(кнопки разной ширины и с текстом, ComboEx). Так вот, ReBar и Toolbar я уже сделал с помощью функции
CreateWindowEx(). Споткнулся на обработке уведомлений от ComboEx, что-то он мне не то шлет как в
http://www.msdn.com/ написано. Да и переводить код с C++ на VB надоело. А тут этот топик увидел и решил попробовать контролы на форму накидать и изменить свойства какие мне нужно через API.
Я первоначальный код маленько подправил:
Module1
- Код: Выделить всё
Option Explicit
'Установим константы
Public Const WM_USER As Long = &H400
Public Const TB_SETSTYLE As Long = WM_USER + 56
Public Const TB_GETSTYLE As Long = WM_USER + 57
Public Const TBSTYLE_FLAT As Long = &H800
Public Const TBSTYLE_TOOLTIPS As Long = &H100
Public Const TBSTYLE_LIST As Long = &H1000
Public Const TB_SETBUTTONWIDTH As Long = WM_USER + 59
Public Const TB_AUTOSIZE As Long = WM_USER + 33
Public Const TB_SETBITMAPSIZE As Long = WM_USER + 32
Public Const TB_SETBUTTONSIZE As Long = WM_USER + 31
Public Const TB_SETBUTTONINFO As Long = WM_USER + 66
Public Const TBIF_SIZE As Long = &H40
Public Const WS_CHILD As Long = &H40000000
Public Const CCS_NODIVIDER As Long = &H40
Public Const CCS_NOPARENTALIGN As Long = &H8
Public Const CCS_NORESIZE As Long = &H4
'Объявим функции
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
' * структура toolbar buttons info
Public Type TBBUTTONINFO
cbSize As Long
dwMask As Long
idCommand As Long
iImage As Long
fState As Byte
fStyle As Byte
Cx As Integer
lParam As Long
pszText As String
cchText As Long
End Type
Public Function MakeLong(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long
'Creates a Long value using Low and High integers
'Useful when converting code from C++
MakeLong = CLng(LoWord)
Call CopyMemory(ByVal VarPtr(MakeLong) + 2, HiWord, 2)
End Function
Form1- Код: Выделить всё
Option Explicit
Private Sub Form_Initialize()
Call FlatBar(ByVal Toolbar1.hWnd)
Me.Toolbar1.Visible = True
End Sub
'Сделать плоский тулбар
Public Sub FlatBar(ByVal tbhWnd As Long)
Dim style As Long
Dim hToolbar As Long
Me.Toolbar1.TextAlignment = tbrTextAlignRight
hToolbar = FindWindowEx(ByVal tbhWnd, ByVal 0&, "msvb_lib_toolbar", vbNullString)
style = WS_CHILD Or TBSTYLE_FLAT Or TBSTYLE_LIST Or TBSTYLE_TOOLTIPS Or CCS_NODIVIDER Or _
CCS_NOPARENTALIGN Or CCS_NORESIZE
Call SendMessage(ByVal hToolbar, TB_SETSTYLE, ByVal 0&, ByVal style)
Call SendMessage(ByVal hToolbar, ByVal TB_SETBITMAPSIZE, ByVal 0&, ByVal MakeLong(20, 20))
Call SendMessage(ByVal hToolbar, ByVal TB_SETBUTTONSIZE, ByVal 0&, ByVal MakeLong(30, 30))
Call SendMessage(ByVal hToolbar, ByVal TB_SETBUTTONWIDTH, ByVal 0&, ByVal MakeLong(30, 30))
Call SendMessage(ByVal hToolbar, ByVal TB_AUTOSIZE, ByVal 0&, ByVal 0&)
Dim lButton As Long
Dim TBI As TBBUTTONINFO
TBI.cbSize = LenB(TBI)
TBI.dwMask = TBIF_SIZE
TBI.Cx = 80
lButton = 0
Call SendMessage(ByVal hToolbar, ByVal TB_SETBUTTONINFO, ByVal lButton, TBI)
End Sub
ВОПРОС:не отрабатывается сообщение:
- Код: Выделить всё
Call SendMessage(ByVal hToolbar, ByVal TB_SETBUTTONINFO, ByVal lButton, TBI)
Хотя когда я ToolBar создаю руками через
CreateWindowEx() работает. Может кто подскажет причину?