Свои картинки на кнопках в Toolbar
Модераторы: Duncon, Hawk, Romeo, Eugie
Тулбар создаю при помощи CreateWindowEx(0, TOOLBARCLASSNAME,...). Последовательно отправляю тулбару TB_BUTTONSTRUCTSIZE, TB_ADDSTRING (стиль кнопок TBSTYLE_LIST указан), TB_ADDBITMAP и TB_ADDBUTTONS.
Очевидно, что не правильно заполняю поля структуры TBADDBITMAP, т.к. если установить hInst в HINST_COMMCTRL, а nID , скажем в IDB_STD_SMALL_COLOR, то стандартные картинки грузятся нормально.
Собственно вопрос наверное нужно сформулировать так: что есть the resource identifier of the bitmap with the button images?
Ибо попытки поставить hInst в 0 или в хэндл dll'и и использовать 0 или 1 в качестве этого самого nID заканчиваются полным фиаско, хотя в ресурсах имеются 2 bmp'хи.
Очевидно, что не правильно заполняю поля структуры TBADDBITMAP, т.к. если установить hInst в HINST_COMMCTRL, а nID , скажем в IDB_STD_SMALL_COLOR, то стандартные картинки грузятся нормально.
Собственно вопрос наверное нужно сформулировать так: что есть the resource identifier of the bitmap with the button images?
Ибо попытки поставить hInst в 0 или в хэндл dll'и и использовать 0 или 1 в качестве этого самого nID заканчиваются полным фиаско, хотя в ресурсах имеются 2 bmp'хи.
Даже самый дурацкий замысел можно воплотить мастерски
Скопировал бмп-ху из comctrl32.dll. Присвоил ей уникальный ID в ресурсах, его же использую в nID. Каменный цветок не выходит



Даже самый дурацкий замысел можно воплотить мастерски
Собака порылась в hInst - не тот указывал.
Даже самый дурацкий замысел можно воплотить мастерски
А у меня вопрос такой: почему в ToolBar'е нельзя использовать в качестве картинки для кнопок bitmap больше чем с 256-ю цветами?
Использую тоже CreateWindowEx, TB_BUTTONSTRUCTSIZE, TB_ADDBITMAP и TB_ADDBUTTONS. При посылке сообщения TB_ADDBITMAP, если передать 256-ти цветный битмап, то всё нормально, если цветов больше - Access Violation. Может кто встречался с подобным?
Использую тоже CreateWindowEx, TB_BUTTONSTRUCTSIZE, TB_ADDBITMAP и TB_ADDBUTTONS. При посылке сообщения TB_ADDBITMAP, если передать 256-ти цветный битмап, то всё нормально, если цветов больше - Access Violation. Может кто встречался с подобным?
Наткнулся вот ещё на что. Я вытащил из shell32.dll битмап, из которого IE делает свой тулбар. Там 32-х битный цвет. Вставил в свою программу, и тулбар создался нормально. Залез в Paint чтобы изменить цвет фона, сохранил, опять вставил - ошибка. Как нужно сохранять бмп, чтобы всё было нормально?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
А зачем цвет фона менял? По всей видимости в нём-то собака и порылась.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Изменение цвета фона не было целью как таковой. Если в Paint'е открыть тот файл, а затем, ничего в нём не трогая, сохранить под другим именем, то ошибка всё равно проявляется. Тем более что в ИЕшном битмапе цвет фона чёрный и он так и остаётся чёрным при создании тулбара(как уже говорилось в одной из веток на этом форуме, битмап нужно залить серым RGB(192,192,192))
HumVee, а ты каким образом загружаешь битмап? Поступило предположение, что прежде чем скормить битмапину тулбару её нужно привести к удобоваримому виду.
Даже самый дурацкий замысел можно воплотить мастерски
Вот функция, которой я создаю тулбар:
Ошибка возникает при посылке сообщения TB_ADDBITMAP.
Код: Выделить всё
HWND CreateToolBar(HWND hWndParent)
{
HWND hwndToolbar;
TBADDBITMAP tb;
// Toolbar buttons
TBBUTTON tbButtons [] =
{
{0, IDM_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
{1, IDM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
{2, IDM_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
{3, IDM_DEL, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
};
DWORD dwStyle = WS_VISIBLE | WS_CHILD | CCS_TOP | TBSTYLE_TOOLTIPS |
CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_NODIVIDER | TBSTYLE_FLAT |
TBSTYLE_TRANSPARENT;
hWndToolbar = CreateWindowEx (0, TOOLBARCLASSNAME, "myToolBar",
dwStyle, 0, 0, 0, 0, hWndParent, (HMENU)ID_TOOLBAR, hInstance, NULL);
SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
tb.hInst = hInstance; //моей программы
tb.nID = IDB_BTNBMP; //ID моего битмапа
SendMessage (hWndToolbar, TB_ADDBITMAP, 11, (LPARAM)&tb);
SendMessage (hWndToolbar, TB_ADDBUTTONS, 4, (LONG) &tbButtons);
return hWndToolbar;
}
HumVee, так тебе предлагатся загрузить битмапину самостоятельно при помощи LoadImage, а уже потом скормить тулбару.
Даже самый дурацкий замысел можно воплотить мастерски