Страница с сайта Владислава Пирогова Ассемблер и не только.

СОЗДАНИЕ ПАНЕЛИ ИНСТРУМЕНТОВ НА АССЕМБЛЕРЕ.

Для создания панели инструментов используется функция Windows API CreateToolbarEx. Эта функция находится в библиотеке comctl32.dll, однако перед её использованием надо вызвать функцию InitCommonControls, для того чтобы убедиться, что библиотека загружена.
В приведенном примере рассматривается создание простой панели инструментов. Более подробную информацию о функции CreateToolbarEx смотрите в справочнике по функциям Windows API.
Для создания стандартной панели инструментов, использующей стандартные иконки поместите следующий код в секцию данных программы:

TB TBBUTTON
TBBUTTON
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0>
TBBUTTON

Здесь определены кнопки, которые мы расположим на панели инструментов. Структура TBUTTON содержит следующие поля:
iBitmap - номер иконки, мы используем стандартные.
idCommand - идентификатор команды. Используется в сообщениях WM_COMMAND.
fsState - доступность кнопки. TBSTATE_ENABLED - кнопка доступна, 0 - кнопка недоступна.
fsStyle - стиль кнопки, TBSTYLE_BUTTON - кнопка, TBSTYLE_SEP - разделитель.
dwData - полную информацию смотрите в справочнике по функциям Windows API. В нашем случае используется 0 для стандартных кнопок.
iString - полную информацию смотрите в справочнике по функциям Windows API. В нашем случае используется 0 для стандартных кнопок.

Функцию CreateToolbarEx можно вызвать в обработчике сообщения WM_CREATE или WM_INITDIALOG.

invoke CreateToolbarEx, \
hWnd, WS_CHILD+WS_BORDER+WS_VISIBLE+TBSTYLE_TOOLTIPS+CCS_ADJUSTABLE, \
450, 4, HINST_COMMCTRL, IDB_STD_SMALL_COLOR, addr TB, \
4, 16, 16, 16, 16, size TBBUTTON

Полную информацию о параметрах функции смотрите в справочнике по функциям Windows API, здесь же остановимся на основных:
TBSTYLE_TOOLTIPS необходимо для того, чтобы было можно задать подсказки (hint's) для кнопок. 450 - это идентификатор панели инструментов, следующая 4 - количество иконок (равно количеству кнопок на панели инструментов).
HINST_COMMCTRL - говорит, что мы используем стандартные иконки ( Вы можете создать свой файл ресурсов и грузить иконки для кнопок из него).
IBD_STD_SMALL_COLOR - используем стандартные, маленькие, цветные иконки.

Для добавления подсказок к кнопкам панели инструментов поместим в секции данных .data следующие определения:

.data
szTipOpen db 'Open File',0
szTipSave db 'Save File',0
szTipExit db 'Exit Application',0

Затем добавим в обработчик сообщения WM_NOTIFY следующий код:

.IF wMsg==WM_NOTIFY
mov ebx,[lParam]
.IF dword ptr [ebx+8] == TTN_NEEDTEXT
mov eax,dword ptr [ebx+4]
.IF eax==500
mov dword ptr [ebx+12], offset szTipOpen
.ELSEIF eax==501
mov dword ptr [ebx+12], offset szTipSave
.ELSEIF eax==502
mov dword ptr [ebx+12], offset szTipExit
.ENDIF
xor eax,eax
ret
.ENDIF
.ENDIF



Т.е. просто надо наполнить буфер подсказки соответствующим текстом.