Как указать ToolBar'у цвет BackGround'а?

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

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

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

20 май 2004, 16:28

Господа, помогите. Проблема такова:

Создаю ToolBar с помощью CreateToolbarEx которой передаётся ID битмапки и размеры кнопочек (из этой битмапки ToolBar при создании нарезает картинки для своих баттонов). При рисовании картинок для кнопок я использовал белый цвет в качестве фонового.

Вопрос: Как "сказать" ToolBar'у, что этот самый белый цвет нужно подразумевать как фоновый для того, чтобы в процессе функционирования отображать вместо него фон, выставленный пользователем в настройках Windows.

P.S. Использую WTL, прийму помощь и на API, естественно... :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

20 май 2004, 16:34

Romeo, непрограммный способ, на сколько я помню: верхний левый пиксель битмапа должен быть покрашен в тот цвет, который будет считаться "прозрачным".
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

20 май 2004, 17:14

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

20 май 2004, 17:38

Romeo, тогда я пас. Создаю тулбар при помощи CreateWindowEx (CreateToolbarEx некошерным нынче считается), картинку (одну на все кнопки) и кнопки добавляю при помощи сообщений TB_ADDBITMAP и TB_ADDBUTTONS соответственно, незабыв предварительно отправить TB_BUTTONSTRUCTSIZE. При изменении цвета у 3D Objects в свйоствах экрана на любой другой у иконы фон меняется с исходного серого на тот, что нужно.
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

20 май 2004, 18:42

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

20 май 2004, 20:16

Romeo, не, в приват кидать ничего не буду. Просто обязательно ещё желающие нарисуются, а я человек ленивый :)

Вот кусок кода:

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

 const 
    IDB_TOOLBAR_BUTTONS = 1022;
 var
    tbButtons:  array[0..5] of TTBButton;
    tbBitmap:   TTBADDBITMAP;

 begin

    with tbButtons[0] do begin
       iBitmap := 0;
       idCommand := IDC_PRESSBUTTON1;
       fsStyle := BTNS_WHOLEDROPDOWN  or TBSTYLE_AUTOSIZE;
       fsState := TBSTATE_ENABLED;
       dwData := 0;
       iString := 0;
    end;

     ...   
     hToolbar := CreateWindowEx(0, TOOLBARCLASSNAME, '',
                WS_CHILD  or WS_VISIBLE or  TBSTYLE_LIST or CCS_NODIVIDER or
                TBSTYLE_FLAT, 0, 0, 400, 22, hParent, 0, 0, nil);


    SendMessage(hToolBar, TB_BUTTONSTRUCTSIZE, SizeOf(TTBBUTTON), 0);

    tbBitmap.hInst:=Hinstance;
    tbBitmap.nID:=IDB_TOOLBAR_BUTTONS;

    SendMessage(hToolBar, TB_ADDBITMAP,  WPARAM(2), LPARAM(@tbBitmap));
    SendMessage(hToolBar, TB_ADDBUTTONS, 6, LPARAM(@tbButtons));

    SendMessage(hToolBar, TB_AUTOSIZE, 0, 0);
...
end;
Паскаль, но думаю разберёшься. Собака в паскале, то же самое, что амперсэнд в Ц, т.е. адрес.
Несущественные детали, типа создания родителя и установки строк опустил.

Да, TOOLBARCLASSNAME - константа, определённая в windows.h
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

20 май 2004, 20:29

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

20 май 2004, 20:38

Кстати, можно было и не позорится на старости лет, а дать ссылочку на первоисточник:
http://www.msdn.microsoft.com/library/d ... _using.asp
:)

Да, есть такоее мнение, что ты забыл TBSTYLE_FLAT заюзать.
Цитата: Note For Common Controls version 6.00, if a visual style is being used with the toolbar, buttons are always transparent regardless of the style setting. Otherwise, transparency behavior is normal as indicated by the use of the TBSTYLE_FLAT or TBSTYLE_TRANSPARENT style.
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

21 май 2004, 13:43

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

21 май 2004, 13:52

Romeo, тогда скорее всего дело в битмапах. Попробуй фон серым залить RGB(192,192,192).
Даже самый дурацкий замысел можно воплотить мастерски
Ответить