API и FreeBasic. (дочерние окна-ToolBar)
Наверное ни один качественный на сегодня текстовый редактор не обходится без такого важного компонента интерфейса как тулбар (ToolBar). Еще с древних Windows удобным интерфейсом считался набор из меню + тулбар. Пример части интерфейса редактора FbEdit:
На тулбар обычно размещают часто используемые кнопки, а все вскопе можно найти в меню. И конечно очень приветствуется пользователем, когда панель тулбара настраивается.
Сам по себе тулбар - это набор кнопок. Для каждой кнопки есть возможность по желанию установить текст и битовый образ. И для лучшей адаптации пользователя к программе , для каждой кнопки обычно устанавливается подсказка.
Способ создания тулбара делится как минимум на две составных части:
- Создание и заполнение массива кнопок с типом структуры TBBUTTON
- Создание окна тулбара с помощью специализированной функции CreateToolbarEx
Кроме CreateToolbarEx можно использовать привычную функцию для создания окон CreateWindowEx с последующей отправкой сообщений для инициализации различных аспектов панели инструментов.
Параметры функции CreateToolbarEx таковы:
CreateToolbarEx( _ hwnd As HWND,_ 'хендл окна родителя ws As DWORD,_ 'стиль окна wID As UINT,_ ' идентификатор тулбара nBitmaps As Integer,_ 'кол-во пиктограмм hBMInst As HINSTANCE,_ 'идентификатор приложения wBMID As UINT,_ 'дескриптор экземпляра модуля исполняемого файла, который содержит растровые ресурсы. lpButtons As LPCTBBUTTON,_ 'адрес массива кнопок с типом TBBUTTON iNumButtons As Int,_ 'количество кнопок dxButton As Integer,_ 'ширина кнопок dyButton As Integer,_ 'высота кнопок dxBitmap As Integer,_ 'ширина пиктограмм dyBitmap As Integer,_ 'высота пиктограмм uStructSize As UINT _ 'размер структуры в байтах )
Структура TBBUTTON выглядит так:
Type TBBUTTON iBitmap As Integer ' индекс изображения idCommand As Integer ' идентификатор кнопки fsState As Byte ' состояние кнопки fsStyle As Byte ' стиль кнопки dwData As Integer ' дополнительные данные о кнопке iString As Integer ' номер текстовой строки End Type
- iBitmap - индекс образа битмапа может быть как стандартным, так и
получаемым из списка изображений, который перед этим необходимо создать с
помощью ImageList_Create ( создание списка изображений расматривалось в статье
про ComboBox).
Стандартные битовые образы зависят от 6 параметра функции
CreateToolbarEx:
IDB_HIST_SMALL_COLOR или IDB_HIST_LARGE_COLOR
(0) HIST_BACK (назад)
(1) HIST_FORWARD (вперед)
(2) HIST_FAVORITES (Открыть папку "Избранное")
(3) HIST_ADDTOFAVORITES (Добавить в избранное)
(4) HIST_VIEWTREE (Просмотр каталога(дерева))
IDB_STD_SMALL_COLOR или IDB_STD_LARGE_COLOR
(0)STD_CUT ; Cut operation. (вырезать)
(1)STD_COPY Copy operation (копировать)
(2)STD_PASTE Paste operation.(Вставить)
(3)STD_UNDO Undo operation. (Отменить)
(4)STD_REDOW Redo operation. (Вернуть)
(5)STD_DELETE Delete operation. (Удалить)
(6)STD_FILENEW New file operation. (Новый файл)
(7)STD_FILEOPEN Open file operation. (Открыть файл)
(8)STD_FILESAVE Save file operation. (Сохранить файл)
(9)STD_PRINTPRE Print preview operation. (Версия для печати)
(10)STD_PROPERTIES Properties operation. (Свойства)
(11)STD_HELP Help operation. (Помощь)
(12)STD_FIND Find operation. (Поиск)
(13)STD_REPLACE Replace operation. (Замена)
(14)STD_PRINT Print operation. (Печать)
IDB_VIEW_LARGE_COLOR или IDB_VIEW_SMALL_COLOR
(0) VIEW_LARGEICONS Просмотр больших иконок
(1) VIEW_SMALLICONS Просмотр маленьких иконок
(2) VIEW_LIST Просмотр списка
(3) VIEW_DETAILS Информация о просмотре
(4) VIEW_SORTNAME Сортировка по имени
(5) VIEW_SORTSIZE Сортировка по размеру
(6) VIEW_SORTDATE Сортировка по дате
(7) VIEW_SORTTYPE Сортировка по типу
(8) VIEW_PARENTFOLDER Перейти в родительскую папку
(9) VIEW_NETCONNECT Подключение к сетевому диску
(10) VIEW_NETDISCONNECT Отключение от сетевого диска
(11) VIEW_NEWFOLDER Перейти в новую папку
В скобках вначале строки указывается реальное значение констант
- idCommand - ID кнопки. Именно по этому присвоенному значению можно будет определять клики по какой-либо кнопке тулбара в сообщении WM_COMMAND
- fsState - Видимое состояние кнопки
TBSTATE_CHECKED - Кнопка стиля флажок находится в нажатом состоянии
TBSTATE_PRESSED - Кнопка любого стиля находится в нажатом состоянии
TBSTATE_ENABLED - Кнопка доступна
TBSTATE_HIDDEN - Скрытая кнопка
TBSTATE_INDETERMINATE - Кнопка отображается серым цветом
TBSTATE_WRAP - Если тулбар имеет стиль TBSTYLE_WRAPABLE , то кнопки , находящиеся после кнопки , имеющей это состояние, отображаются в новой строке.
- fsStyle - стиль кнопок тулбара
TBSTYLE_BUTTON - стандартная кнопка
TBSTYLE_SEP - разделитель для создания пространства между кнопками или для сохранения места под дочерние элементы (combobox например).
TBSTYLE_CHECK - кнопка двух состояний (может находится в нажатом или отжатом состоянии)
TBSTYLE_GROUP - кнопки с этими стилями способны переключаться подобно триггеру. В один момент будет нажата только одна из группы кнопок с этим стилем
TBSTYLE_CHECKGROUP - объединяет свойства стилей TBSTYLE_CHECK и TBSTYLE_GROUP
- dwData - дополнительные данные (свойства), которые при желании может добавить программист для каждой кнопки
- iString - номер строки в буфере, строки при этом должны быть разделены нулевым символом, а после последней строки два нулевых символа, как знак окончания буфера. При использовании буфера строк, контролу должно быть отправлено сообщение TB_ADDSTRING , при этом в параметре LPARAM должен быть указатель на буфер.
А теперь пример:
#INCLUDE "windows.bi" #INCLUDE "win/commctrl.bi" Dim msg As MSG Dim As WNDCLASSEX wc Dim As String NameClass="MyClass" Dim As HINSTANCE Hinst=GetModuleHandle(0) Dim Shared As String sButtons sButtons = "CUT" & Chr(0) & _ "COPY" & Chr(0) & _ "PASTE" & Chr(0) & _ "UNDO" & Chr(0) & _ "REDO" & Chr(0) & _ "DELETE" & Chr(0) & _ "NEW" & Chr(0) & Chr(0) Function wndproc(hwnd As HWND, msg As Uinteger,_ wparam As WPARAM, lparam As LPARAM) As Integer Static As HWND hwndToolbar Select Case msg Case WM_CREATE Dim ttb(6) As TBBUTTON For i As Integer = 0 To 6 If i = 3 Then ttb(i).iBitmap = 0 ttb(i).idCommand = i ttb(i).fsState = TBSTATE_ENABLED ttb(i).fsStyle = TBSTYLE_SEP ttb(i).iString = 0 Else ttb(i).iBitmap = i ttb(i).idCommand = i+1 ttb(i).fsState = TBSTATE_ENABLED ttb(i).fsStyle = TBSTYLE_BUTTON ttb(i).iString = i Endif Next hwndToolbar = CreateToolbarEx(hwnd,_ WS_CHILD+WS_VISIBLE+TBSTYLE_LIST+_ WS_CLIPSIBLINGS+CCS_TOP+TBSTYLE_TOOLTIPS,_ 0,0,HINST_COMMCTRL,_ IDB_STD_SMALL_COLOR,_ @ttb(0),7,0,0,0,0,Sizeof(TBBUTTON)) SendMessage(hwndToolbar,TB_ADDSTRING,0,Cast(Lparam,Sadd(sButtons))) Case WM_NOTIFY Dim As LPNMHDR pnm = Cast( LPNMHDR,lParam) If pnm->code = TTN_GETDISPINFO Then Dim As LPNMTTDISPINFO pdi = Cast(LPNMTTDISPINFO,pnm) Dim As ZString*16 szText SendMessage(hwndToolbar,TB_GETBUTTONTEXT,pdi->hdr.idFrom,Cast(Lparam,@szText)) pdi->szText = szText Endif Case WM_COMMAND Select Case Loword(WPARAM) Case 1 To 7 MessageBox(0,"Button " & Loword(WPARAM),"",0) End Select Case WM_DESTROY PostQuitMessage(0) End Select Return DefWindowProc(hwnd,msg,wparam,lparam) End Function With wc .cbSize=SizeOf(WNDCLASSEX) .style=CS_HREDRAW Or CS_VREDRAW .lpfnWndProc=@wndproc .hInstance=Hinst .hIcon=LoadIcon(0,IDI_WINLOGO) .hCursor=LoadCursor(0,IDC_ARROW) .hbrBackground=Cast(HBRUSH,COLOR_WINDOWFRAME) .lpszClassName=StrPtr(NameClass) .hIconSm=.hIcon End With If RegisterClassEx(@wc)=0 Then Print "Register error, press any key" Sleep End Endif CreateWindowEx(0,NameClass,"",_ WS_VISIBLE Or WS_OVERLAPPEDWINDOW,100,100,420,100,0,0,Hinst,0) While GetMessage(@msg,0,0,0) TranslateMessage(@msg) DispatchMessage(@msg) Wend
В этом примере создается тулбар с кнопками , строками и подсказками. Для буфера строк выбрана переменная sButtons, которую после создания контрола мы прикрепляем к нему с помощью сообщения TB_ADDSTRING. Перед вызовом создания контрола, заполняется массив ttb в цикле. Что касается стилей кнопок тулбара, то все кнопки у нас стандартные, видимые, малого размера. Четвертой кнопкой (3 индекс в массиве) определен сепаратор(разделитель). Подсказка (tooltip) для кнопок определена в сообщении WM_NOTIFY. Как только мышь задерживается над кнопкой, имеющей подсказку в течении 1 секунды, поступает сообщение WM_NOTIFY в процедуру окна владельца тулбара с кодом уведомления TTN_GETDISPINFO. При этом в параметре LPARAM оказывается указатель на структуру NMTTDISPINFO. Для того чтобы подсказка отображалась, надо в одно из полей структуры (szText) записать нужную строку. У нас это текстовая строка , которую мы получаем из кнопки тулбара с помощью сообщения TB_GETBUTTONTEXT. При использовании этого сообщения надо в параметр WPARAM передать идентификатор кнопки, а в параметр LPARAM передать выделенный строковой буфер. Получение событий (кликов) от кнопок тулбара ничем не отличается от обычных кнопок. То есть ловим событие WM_COMMAND и в младшем слове проверяем идентификатор кнопки...
Как я и говорил, для пользователя будет удобно , если ему будет предоставлена свобода выбора нужных кнопок на тулбаре. Конечно право программиста делать или нет такую возможность. В некоторых случаях такая возможность может быть совсем не к месту, но в любом случае знать как это можно сделать не помешает.
И так для того чтобы была возможность переносить\удалять\добавлять кнопки тулбара по его поверхности необходимы следующие условия:
- При создании тулбара указать стиль CCS_ADJUSTABLE
- В сообщении WM_NOTIFY обрабатывать коды извещения TBN_GETBUTTONINFO , TBN_QUERYINSERT , TBN_TOOLBARCHANGE , TBN_QUERYDELETE
В событиях TBN_QUERYINSERT и TBN_QUERYDELETE можно устанавливать обработку только нужных кнопок , во всех остальных случаях возвращать FALSE
В событии TBN_TOOLBARCHANGE необходимо обновить (перерисовать тулбар). Сделать это можно , послав сообщение TB_AUTOSIZE контролу.
В событии TBN_GETBUTTONINFO нужно заполнять присланную структуру TBNOTIFY данными из нашего массива с типом TBBUTTON
И конечно пример:
#INCLUDE "windows.bi" #INCLUDE "win/commctrl.bi" #DEFINE TBN_TOOLBARCHANGE TBN_FIRST-8 #DEFINE TBN_QUERYINSERT TBN_FIRST-6 #DEFINE TBN_QUERYDELETE TBN_FIRST-7 ' в заголовке ошибка объявления TBN_GETBUTTONINFO 'поэтому объявим сами #Undef TBN_GETBUTTONINFO #DEFINE TBN_GETBUTTONINFO TBN_FIRST Dim msg As MSG Dim As WNDCLASSEX wc Dim As String NameClass="MyClass" Dim As HINSTANCE Hinst=GetModuleHandle(0) Dim Shared ttb(5) As TBBUTTON Dim Shared As String sButtons sButtons = "CUT" & Chr(0) & _ "COPY" & Chr(0) & _ "PASTE" & Chr(0) & _ "UNDO" & Chr(0) & _ "REDO" & Chr(0) & _ "DELETE" & Chr(0) & Chr(0) Function wndproc(hwnd As HWND, msg As Uinteger,_ wparam As WPARAM, lparam As LPARAM) As Integer Static As HWND hwndToolbar Select Case msg Case WM_CREATE For i As Integer = 0 To 5 ttb(i).iBitmap = i ttb(i).idCommand = i+1 ttb(i).fsState = TBSTATE_ENABLED ttb(i).fsStyle = TBSTYLE_BUTTON ttb(i).iString = i Next hwndToolbar = CreateToolbarEx(hwnd,_ WS_CHILD+WS_VISIBLE+TBSTYLE_LIST+_ WS_CLIPSIBLINGS+CCS_TOP+TBSTYLE_TOOLTIPS+CCS_ADJUSTABLE,_ 0,0,HINST_COMMCTRL,_ IDB_STD_SMALL_COLOR,_ @ttb(0),6,0,0,0,0,Sizeof(TBBUTTON)) SendMessage(hwndToolbar,TB_ADDSTRING,0,Cast(Lparam,Sadd(sButtons))) Case WM_NOTIFY Dim As LPNMHDR pnm = Cast( LPNMHDR,lParam) If pnm->code = TTN_GETDISPINFO Then Dim As LPNMTTDISPINFO pdi = Cast(LPNMTTDISPINFO,pnm) Dim As ZString*16 szText SendMessage(hwndToolbar,TB_GETBUTTONTEXT,pdi->hdr.idFrom,Cast(Lparam,@szText)) pdi->szText = szText Return TRUE Elseif pnm->code = TBN_GETBUTTONINFO Then Dim As TBNOTIFY Ptr tbn = Cast(TBNOTIFY Ptr,pnm) Dim As Integer nItem = tbn->iItem If nItem<=5 Then tbn->tbButton.iBitmap = ttb(nItem).iBitmap tbn->tbButton.idCommand = ttb(nItem).idCommand tbn->tbButton.fsState = ttb(nItem).fsState tbn->tbButton.fsStyle = ttb(nItem).fsStyle tbn->tbButton.dwData = ttb(nItem).dwData tbn->tbButton.iString = ttb(nItem).iString Return TRUE Endif Return FALSE Elseif pnm->code = TBN_QUERYINSERT Then Return true Elseif pnm->code = TBN_TOOLBARCHANGE Then SendMessage(hwndToolbar, TB_AUTOSIZE, 0, 0) Return TRUE Elseif pnm->code = TBN_QUERYDELETE Then Return true Endif Case WM_COMMAND Select Case Loword(WPARAM) Case 1 To 6 MessageBox(0,"Button " & Loword(WPARAM),"",0) End Select Case WM_DESTROY PostQuitMessage(0) End Select Return DefWindowProc(hwnd,msg,wparam,lparam) End Function With wc .cbSize=SizeOf(WNDCLASSEX) .style=CS_HREDRAW Or CS_VREDRAW .lpfnWndProc=@wndproc .hInstance=Hinst .hIcon=LoadIcon(0,IDI_WINLOGO) .hCursor=LoadCursor(0,IDC_ARROW) .hbrBackground=Cast(HBRUSH,COLOR_WINDOWFRAME) .lpszClassName=StrPtr(NameClass) .hIconSm=.hIcon End With If RegisterClassEx(@wc)=0 Then Print "Register error, press any key" Sleep End Endif CreateWindowEx(0,NameClass,"",_ WS_VISIBLE Or WS_OVERLAPPEDWINDOW,100,100,430,100,0,0,Hinst,0) While GetMessage(@msg,0,0,0) TranslateMessage(@msg) DispatchMessage(@msg) Wend
Для того чтобы вызвать такую диалоговую панель, нужно сделать двойной щелчок по свободному месту в панели тулбара. Для того, чтобы не вызывая подобную панель, перемещать кнопки по панели тулбара, достаточно зажать SHIFT и мышью переносить кнопки в любое место панели. Так же можно легко удалить кнопку, достаточно перенести ее за пределы окна.
В этом примере, в начале сделано несколько объявлений констант, которых нет в заголовках. Далее при заполнении массива я исключил разделитель, чтобы не заморачиваться с лишними проверками в событии WM_NOTIFY
При поступлении сообщения WM_NOTIFY , система присылает нам указатель на структуру TBNOTIFY. Ее нам нужно заполнить при поступлении извещения TBN_GETBUTTONINFO, если мы хотим добавлять кнопки. У нас в примере разрешены изменения всех кнопок , то есть в кодах извещения TBN_QUERYINSERT и TBN_QUERYDELETE возвращается TRUE. Если какие-то кнопки надо защитить от изменений, достаточно так же, как и в коде извещения TBN_GETBUTTONINFO (см. пример) создать переменную-указатель на структуру TBNOTIFY , выудить оттуда номер изменяемой ячейки. И если кнопка с этим номером должна быть защищена от изменений, возвратить FALSE
Дополнительно:
Стили, которые можно устанавливать для ToolBar:
- TBSTYLE_TOOLTIP - Возможность установки подсказки Tool Tip
- TBSTYLE_ALTDRAG - Возможность передвигать кнопки тулбара по его поверхности с помощью клавиши Alt и кнопки мыши. Если этот стиль не установлен, то по умолчанию перетаскивается с помощью клавиши SHIFT и кнопки мыши. В обязательном порядке должен быть установлен стиль CCS_ADJUSTABLE
- TBSTYLE_WRAPABLE - При установке этого стиля Toolbar может состоять из нескольких строк при условии, что кнопки не помещаются на одной строчке.
- TBSTYLE_LIST - При установке этого стиля строки располагаются сбоку от изображения
- TBSTYLE_FLAT - При установке этого стиля создается плоская панель инструментов.
- CCS_ADJUSTABLE - При установке этого стиля появляется возможность изменять конфигурацию органа управления
- CCS_BOTTOM - При установке этого стиля тулбар помещается в нижней части окна.
- CCS_TOP - При установке этого стиля тулбар помещается в верхней части окна.
- CCS_NODIVIDER - При установке этого стиля запрещается рисовать двухпиксельную разделительную линию в верхней части тулбара
- CCS_NOHILITE - При установке этого стиля запрещается рисовать однопиксельную выделяющую линию в верхней части тулбара
- CCS_NOMOVEY - В сообщении WM_SIZE у тулбара будут горизонтальные размеры с возможностью передвижения по горизонтали, с сохранением вертикальных размеров
- CCS_NOPARENTALIGN - При установке этого стиля запрещается автоматически перемещаться в верхнюю или нижнюю часть родительского окна
- CCS_NORESIZE - При установке начальных размеров не будут использоваться размеры, заданные по умолчанию. Приложение должно задать размеры органа управления явным образом
- CCS_RIGHT - При установке этого стиля тулбар помещается в правой части окна.
- CCS_LEFT - При установке этого стиля тулбар помещается в левой части окна.
Тулбар посылает родительскому окну сообщения WM_COMMAND и WM_NOTIFY. Что касается WM_COMMAND , то обработка его ничем не отличается от обработки других контролов, например простых кнопок. Но сообщение WM_NOTIFY используется для многих контролов (TreeView, ListView, Tooltip, ToolBar...) , хотя обработка обнообразна (что хорошо само по себе). Принцип прост: Как только родительское окно получает это сообщение, в его параметре WPARAM будет идентификатор контрола, отправившего это сообщение. Однако Микрософт сама тут же оговаривается: данный параметр не может служить 100% гарантией определения идентификатора. Так что мы забудем про параметр WPARAM и приступим к рассмотрению параметра LPARAM. В параметре LPARAM окажется структура NMHDR или другая большего размера, но имеющая в своем начале поля структуры NMHDR (для тулбара мы применяли TBNOTIFY и NMTTDISPINFO). Как раз структура NMHDR может рассказать нам и о хендле и о идентификаторе контрола, пославшего сообщение:
Type NMHDR hwndFrom As HWND ' хендл конрола idFrom As UINT ' ID конрола code As UINT ' код извещения End Type
Код извещения, переданный в третьем параметре NMHDR может быть одним
из:
- NM_CLICK - Пользователь нажал левую кнопку мыши в элементе управления.
- NM_DBLCLK - Пользователь дважды щелкнул левой кнопкой мыши в элементе управления.
- NM_KILLFOCUS - Контрол потерял фокус ввода.
- NM_OUTOFMEMORY - Управление не может завершить операцию, так как не было достаточного объема свободной памяти.
- NM_RCLICK - Пользователь щелкнул правой кнопкой мыши в элементе управления.
- NM_RDBLCLK - Пользователь щелкнул двойным щелчком правой кнопкой мыши в элементе управления.
- NM_RETURN - Контрол имеет фокус ввода и пользователь нажал клавишу ENTER.
- NM_SETFOCUS - Контрол получил фокус ввода.
Так же для разных контролов предусмотрены дополнительные коды извещения. Некоторые коды для тулбара:
- TBN_BEGINADJUST - Пользователь приступил к настройке Toolbar
- TBN_BEGINDRAG - Пользователь начал передвигать кнопку по поверхности Toolbar
- TBN_ENDADJUST - Пользователь закончил настройку Toolbar
- TBN_ENDDRAG - Пользователь закончил передвижение кнопки по поверхности Toolbar
- TBN_CUSTHELP - Пользователь нажал кнопку "Help" в диалоговой панели, которая была вызвана для настройки Toolbar
- TBN_GETBUTTONINFO - Это извещение окно Toolbar посылает в том случае, если ему нужна информация об одной из кнопок
- TBN_QUERYDELETE - С помощью этого извещения окно Toolbar запрашивает возможность удаления кнопки в процессе настройки
- TBN_QUERYINSERT - С помощью этого извещения окно Toolbar запрашивает возможность вставки новой кнопки слева от указанной в процессе настройки
- TBN_RESET - Пользователь нажал кнопку "Reset" в диалоговой панели, которая была вызвана для настройки Toolbar
- TBN_TOOLBARCHANGE - Пользователь изменил внешний вид Toolbar в результате выполнения настройки
Все извещения, а так же их обработку можно посмотреть ЗДЕСЬ
Некоторые сообщения для ToolBar:
- TB_ADDBITMAP - Добавление одного или нескольких изображений к списку изображений органа управления Toolbar
- TB_ADDBUTTONS - Добавление кнопок к органу управления Toolbar
- TB_ADDSTRING - Добавление новых текстовых строк в список органа управления Toolbar
- TB_AUTOSIZE - Посылается для автообновления тулбара после изменения
- TB_BUTTONCOUNT - Возвращает количество кнопок, добавленных в него с момента создания
- TB_BUTTONSTRUCTSIZE - Возвращает размер структуры TBBUTTON
- TB_CHANGEBITMAP - Замена изображения на поверхности кнопки.
- TB_CHECKBUTTON - Для переключения кнопки из отжатого состояния в нажатое и обратно.
- TB_COMMANDTOINDEX - Определение номера кнопки по ее идентификатору(нумерация кнопок начинается с нуля)
- TB_CUSTOMIZE - Для вывода диалоговой панели настройки тулбара(для тулбара должен быть установлен стиль CCS_ADJUSTABLE)
- TB_DELETEBUTTON - Удаление кнопки из окна Toolbar
- TB_ENABLEBUTTON - Блокирование\Разблокирование кнопки
- TB_GETBITMAP - Определение номера изображения по идентификатору кнопки
- TB_GETBITMAPFLAGS - Определение способности монитора отображать картинки большого размера
- TB_GETBUTTON - Получение информации о кнопке
- TB_GETBUTTONTEXT - Получение текстовой строки, связанной с кнопкой
- TB_GETITEMRECT - Определение координат области, занимаемой кнопкой
- TB_GETROWS - Определение количества строк в органе управления Toolbar , имеющим стиль TBSTYLE_WRAPABLE
- TB_GETSTATE - Определение состояния кнопки (нажата ли, отжата ли, спрятана ли и пр.)
- TB_GETTOOLTIPS - Определение идентификатора органа управления ToolTip, связанного с данным органом управления Toolbar
- TB_HIDEBUTTON - Скрытие\Отображение кнопки
- TB_INDETERMINATE - Установка кнопки серым цветом и наоборот
- TB_INSERTBUTTON - вставка кнопки в тулбар
- TB_ISBUTTONCHECKED - Определение нажата кнопка или нет.
- TB_ISBUTTONENABLED - Определение заблокирована кнопка или нет.
- TB_ISBUTTONHIDDEN - Определение скрыта кнопка или нет
- TB_ISBUTTONINDETERMINATE - Определение установлена кнопка серым цветом или нет
- TB_ISBUTTONPRESSED - Определение находится ли кнопка в нажатом состоянии
- TB_PRESSBUTTON - Установка кнопки в нажатое или отжатое состояние.
- TB_SAVERESTORE - Сохранение или восстановление состояния Toolbar
- TB_SETBITMAPSIZE - Установка размера картинки кнопки
- TB_SETBUTTONSIZE - Установка размера кнопки
- TB_SETCMDID - Присвоение кнопке с заданным номером командный идентификатор
- TB_SETPARENT - Назначение для органа управления Toolbar родительского окна
- TB_SETROWS - Установка количества строк кнопок в органе управления Toolbar
- TB_SETSTATE - Установка кнопки в новое состояние
- TB_SETTOOLTIPS - Назначение для тулбара органа управления ToolTip
Все сообщения, а так же их обработку можно посмотреть ЗДЕСЬ
Заключение:
В зависимости от стилей можно создать тулбар под разные задачи и с разным визуальным отображением. Например чтобы создать такую же панель тулбара , как отображена на самом верхнем рисунке в этой статье, нужно использовать стиль TBSTYLE_FLAT и создать файл ресурсов с manifest.xml. Я обязательно расскажу в одной из статей как активировать визуальные стили , которые работают начиная с Windows XP. До тех пор, вы можете спросить на форуме или прочитать об этом на сайте Microsoft
содержание | назад | вперед