Свои картинки на кнопках в Toolbar

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

11 апр 2004, 18:12

Тулбар создаю при помощи 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'хи.
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

11 апр 2004, 18:37

Скопировал бмп-ху из comctrl32.dll. Присвоил ей уникальный ID в ресурсах, его же использую в nID. Каменный цветок не выходит :) :(
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

11 апр 2004, 19:13

Собака порылась в hInst - не тот указывал.
Даже самый дурацкий замысел можно воплотить мастерски
HumVee
Сообщения: 16
Зарегистрирован: 30 май 2004, 02:17
Откуда: Минск

30 май 2004, 02:29

А у меня вопрос такой: почему в ToolBar'е нельзя использовать в качестве картинки для кнопок bitmap больше чем с 256-ю цветами?
Использую тоже CreateWindowEx, TB_BUTTONSTRUCTSIZE, TB_ADDBITMAP и TB_ADDBUTTONS. При посылке сообщения TB_ADDBITMAP, если передать 256-ти цветный битмап, то всё нормально, если цветов больше - Access Violation. Может кто встречался с подобным?
HumVee
Сообщения: 16
Зарегистрирован: 30 май 2004, 02:17
Откуда: Минск

30 май 2004, 16:25

Наткнулся вот ещё на что. Я вытащил из shell32.dll битмап, из которого IE делает свой тулбар. Там 32-х битный цвет. Вставил в свою программу, и тулбар создался нормально. Залез в Paint чтобы изменить цвет фона, сохранил, опять вставил - ошибка. Как нужно сохранять бмп, чтобы всё было нормально?
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

01 июн 2004, 12:28

А зачем цвет фона менял? По всей видимости в нём-то собака и порылась.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
HumVee
Сообщения: 16
Зарегистрирован: 30 май 2004, 02:17
Откуда: Минск

01 июн 2004, 20:56

Изменение цвета фона не было целью как таковой. Если в Paint'е открыть тот файл, а затем, ничего в нём не трогая, сохранить под другим именем, то ошибка всё равно проявляется. Тем более что в ИЕшном битмапе цвет фона чёрный и он так и остаётся чёрным при создании тулбара(как уже говорилось в одной из веток на этом форуме, битмап нужно залить серым RGB(192,192,192))
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

01 июн 2004, 21:02

HumVee, а ты каким образом загружаешь битмап? Поступило предположение, что прежде чем скормить битмапину тулбару её нужно привести к удобоваримому виду.
Даже самый дурацкий замысел можно воплотить мастерски
HumVee
Сообщения: 16
Зарегистрирован: 30 май 2004, 02:17
Откуда: Минск

02 июн 2004, 23:33

Вот функция, которой я создаю тулбар:

Код: Выделить всё

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;
}
Ошибка возникает при посылке сообщения TB_ADDBITMAP.
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

03 июн 2004, 00:56

HumVee, так тебе предлагатся загрузить битмапину самостоятельно при помощи LoadImage, а уже потом скормить тулбару.
Даже самый дурацкий замысел можно воплотить мастерски
Ответить