Страница 1 из 2

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

Добавлено: 11 апр 2004, 18:12
AiK
Тулбар создаю при помощи 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'хи.

Добавлено: 11 апр 2004, 18:37
AiK
Скопировал бмп-ху из comctrl32.dll. Присвоил ей уникальный ID в ресурсах, его же использую в nID. Каменный цветок не выходит :) :(

Добавлено: 11 апр 2004, 19:13
AiK
Собака порылась в hInst - не тот указывал.

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

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

Добавлено: 01 июн 2004, 12:28
Romeo
А зачем цвет фона менял? По всей видимости в нём-то собака и порылась.

Добавлено: 01 июн 2004, 20:56
HumVee
Изменение цвета фона не было целью как таковой. Если в Paint'е открыть тот файл, а затем, ничего в нём не трогая, сохранить под другим именем, то ошибка всё равно проявляется. Тем более что в ИЕшном битмапе цвет фона чёрный и он так и остаётся чёрным при создании тулбара(как уже говорилось в одной из веток на этом форуме, битмап нужно залить серым RGB(192,192,192))

Добавлено: 01 июн 2004, 21:02
AiK
HumVee, а ты каким образом загружаешь битмап? Поступило предположение, что прежде чем скормить битмапину тулбару её нужно привести к удобоваримому виду.

Добавлено: 02 июн 2004, 23:33
HumVee
Вот функция, которой я создаю тулбар:

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

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.

Добавлено: 03 июн 2004, 00:56
AiK
HumVee, так тебе предлагатся загрузить битмапину самостоятельно при помощи LoadImage, а уже потом скормить тулбару.