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

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

Добавлено: 20 май 2004, 16:28
Romeo
Господа, помогите. Проблема такова:

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

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

P.S. Использую WTL, прийму помощь и на API, естественно... :)

Добавлено: 20 май 2004, 16:34
AiK
Romeo, непрограммный способ, на сколько я помню: верхний левый пиксель битмапа должен быть покрашен в тот цвет, который будет считаться "прозрачным".

Добавлено: 20 май 2004, 17:14
Romeo
Проверил, это пиксел - белый. Не работает!

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

Добавлено: 20 май 2004, 18:42
Romeo
Можно примерчик на RomeoMontekky@mail.ru скинуть. Сравню и пойму что не так, по крайней мере.

Добавлено: 20 май 2004, 20:16
AiK
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

Добавлено: 20 май 2004, 20:29
Romeo
Да я знаю Паскаль, прекрасно. Все с него начинали. Пасибо, щас буду дегустировать :)

Добавлено: 20 май 2004, 20:38
AiK
Кстати, можно было и не позорится на старости лет, а дать ссылочку на первоисточник:
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.

Добавлено: 21 май 2004, 13:43
Romeo
Неа, не забыл. Проблема в чём-то другом. В чём именно, пока не выяснил.

Добавлено: 21 май 2004, 13:52
AiK
Romeo, тогда скорее всего дело в битмапах. Попробуй фон серым залить RGB(192,192,192).