Как использовать пользовательские значки для панелей инструментов в программировании winapi

Я пытаюсь использовать свои собственные изображения для создания панели инструментов в Win32-программе Win32. Вот что у меня есть (в моем случае WM_CREATE):

#define IDT_MAIN_TOOL     101
TBBUTTON tbb[ 1 ];
TBADDBITMAP tbab;

HWND hToolbar = CreateWindowEx( 0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT, 0, 0, 0, 0, hwnd, ( HMENU )IDT_MAIN_TOL, NULL, NULL );

SendMessage( hToolbar, TB_BUTTONSTRUCTSIZE, ( WPARAM )sizeof( TBBUTTON ), 0 );

tbab.hInst = HINST_COMMCTRL;
tbab.nID = IDB_HIST_LARGE_COLOR;
SendMessage( hToolbar, TB_ADDBITMAP, 0, ( LPARAM )&tbab );

ZeroMemory( tbb, sizeof( tbb ) );

tbb[ 0 ].iBitmap = HIST_BACK;
// I've also tried tbb[ 0 ].iBitmap = LoadIcon( NULL, "browse_back.ico" );
// However, iBitmap must be an integer and can't figure out how to use my 'browse_back.ico' image
tbb[ 0 ].fsState = TBSTATE_ENABLED;

SendMessage( hToolbar, TB_ADDBUTTONS, sizeof( tbb ) / sizeof( TBBUTTON ), ( LPARAM )&tbb );

Я хотел бы использовать мое собственное изображение значка: «browse_back.ico» в качестве изображения для этой кнопки панели инструментов. Как это достигается? Не уверен, если это необходимо, но я использую Microsoft Visual C ++ 2010 Express.

0

Решение

Читать документацию:

iBitmap
Тип: int

Начинающийся с нуля индекс кнопки изображения. Установите для этого члена значение I_IMAGECALLBACK, и панель инструментов отправит код уведомления TBN_GETDISPINFO, чтобы получить индекс изображения, когда это необходимо.

Версия 5.81. Установите для этого элемента значение I_IMAGENONE, чтобы указать, что на кнопке нет изображения. Компоновка кнопки не будет содержать места для растрового изображения, только текст.

Если кнопка является разделителем, то есть если для fsStyle установлено значение BTNS_SEP, iBitmap определяет ширину разделителя в пикселях. Для получения информации о выборе изображений кнопок из списков изображений см. Сообщение TB_SETIMAGELIST.

Так что вам нужно создать список изображений с помощью ImageList_Create(), добавьте свой ICO образ к нему, используя ImageList_Add() или же ImageList_ReplaceIcon(), связать его с панелью инструментов, используя TB_SETIMAGELIST, и тогда вы можете установить tbb[0].iBitmap к индексу ICO в списке изображений.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]