Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как поменять иконку на кнопке тулбара  (Прочитано 19378 раз)
0 Пользователей и 1 Гость смотрят эту тему.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« : 02-08-2004 05:03 » 

Люди! Как поменять иконку на кнопке тулбара чтобы все остальные иконки остались без изменения Подгрузка второго битмапа не катит Кто знает?
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 02-08-2004 08:47 » 

MFC? API? Borland?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #2 : 02-08-2004 09:12 » 

Sory ) MFC
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 02-08-2004 13:24 » 

 Так больше нельзя...  Стандартными средствами не получится. Можно: сделать копию с ToolBar BMP файла. Вставить её в ресурсы изменить картинку нужной кнопки. Потом создать  в CMAinFrame объект член типа указатель на CBitmap. По необходимости инициаллизить объект с BMP и устанавливать его в ToolBar
m_wndToolBar.SetBitmap(*m_tbBMP);

.h

CBitmap *m_tbBMP;


в конструкторе
m_tbBMP = NULL;

в деструкторе не забыть

delete m_tbBMP;
где необходимо
....
   CBitmap *pBmp = new CBitmap();
   pBmp->LoadBitmap(IDB_BITMAP1);
   m_wndToolBar.SetBitmap(*pBmp);
   delete m_tbBMP;
   m_tbBMP = pBmp;
   m_wndToolBar.RedrawWindow();
....


Способ 2.
Создаём копию тулбарной картинки и вставляем её в ресурсы. Увеличиваем размер вправо на Н пикселей - где Н число необходимых символов * на ширину символа одной кнопи обычно 16, те если надо 2 состояния, то 32 и тд.
Рисуем туда значки. Это будут наши скрытые значки.

Повторяем действия п1 с той разницей, что инициализим m_tbBMP сразу в:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

   m_tbBMP = new CBitmap();
   m_tbBMP->LoadBitmap(IDB_BITMAP1);
   m_wndToolBar.SetBitmap(*m_tbBMP);


ТАм где необходимо - делаем след. (необходимо знать позицию кнопки, которую хотим поменять)

   UINT uiID;
   UINT uiStyle;
   int nImg;

   m_wndToolBar.GetButtonInfo( индекc кнопки ,uiID,uiStyle,nImg);
   m_wndToolBar.SetButtonInfo(индекc кнопки,uiID,uiStyle, номер символа в BMP);
   m_wndToolBar.RedrawWindow();
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #4 : 03-08-2004 01:53 » 

Так то оно так только проблема в том что я зараннее незнаю как будет выглядеть кнопка( Ее изображение в виде иконки я получаю из DLL(((
Вся проблема в динамическом изменении тулбара Неужели придется программно BMP редактировать(( Геморой(
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 03-08-2004 07:21 » 

Это точно, геморой. Ну тогда делай свой тулбар. Это самый чистый способ.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #6 : 03-08-2004 07:38 » 

C ownerdraw возиться неохота)
Я тут на ToolBarCtrl набрел у него вроде ImageList есть там все это дело намного проще вроде ... Щас попробую
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #7 : 04-08-2004 05:51 » 

О как!

CToolBarCtrl* ToolCtrl=&m_pToolBar->GetToolBarCtrl();//Получаем контрол
 int nButCount = ToolCtrl->GetButtonCount();//Определяем количество кнопок
  ToolCtrl->AddBitmap(1, IDB_BITMAP2);//Подключаем нашу картинку
   int err=GetLastError();
   int nImageCount = ToolCtrl->GetImageList()->GetImageCount();//Определяем число картинок в тулбаре
    //Создаем новую кнопку
   TBBUTTON tb;
  tb.iBitmap = nImageCount-1;
 tb.idCommand = DTB_IDD_BUTTONS;
tb.fsState = TBSTATE_ENABLED;
 tb.fsStyle = TBSTYLE_BUTTON;
  tb.dwData = 0;
   tb.iString = NULL;
    ToolCtrl->InsertButton(nButCount, &tb);
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 04-08-2004 07:31 » 

USBLexus,  Слушай, я не понял. Тебе новую кнопку надо было вставить, или картинку на кнопке поменять?
Потом - сделать свой Тулбар ещё не означает возню с ownrdraw.
А почему ты оставил возможность использовать ImageList?

Можно было бы так сделать:

.h файл
Код:
class CDynToolBar : public CToolBar
{

public:
CDynToolBar();
virtual ~CDynToolBar();
public:
void SetButtonBMP(int nBtnInd, CBitmap &bmp, const COLORREF &crMask);
protected:
DECLARE_MESSAGE_MAP()
};

.cpp файл

Код:
CDynToolBar::CDynToolBar()
{
}

CDynToolBar::~CDynToolBar()
{
}


BEGIN_MESSAGE_MAP(CDynToolBar, CToolBar)
END_MESSAGE_MAP()

void CDynToolBar::SetButtonBMP(int nBtnInd, CBitmap &bmp, const COLORREF &crMask)
{
if(GetToolBarCtrl().GetButtonCount()<=nBtnInd) return;

CImageList *pil = GetToolBarCtrl().GetImageList();
int nNewIndex = pil->Add(&bmp, crMask);
GetToolBarCtrl().SetImageList(pil);

UINT uiID;
UINT uiStyle;
int nImg;

GetButtonInfo(nBtnInd,uiID,uiStyle,nImg);
SetButtonInfo(nBtnInd,uiID,uiStyle,nNewIndex);
RedrawWindow();
}

Использование

Код:
	CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP4);
m_wndToolBar.SetButtonBMP(5,bmp,RGB(255,255,0));

Можно конечно и для icon перегрузить.
« Последнее редактирование: 30-11-2007 21:42 от Алексей1153++ » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #9 : 04-08-2004 07:52 » 

>Слушай, я не понял. Тебе новую кнопку надо было вставить, или картинку >на кнопке поменять?

До этого у меня получалось создавать кнопки без иконок а загрузить свою иконку из DLL я на них не мог Теперь эта проблема решена

>Потом - сделать свой Тулбар ещё не означает возню с ownrdraw.

Да я понимаю
По сути дела существующий тулбар меня устраивал Неустраивало только отсутствие иконок  те внешний вид тулбара Лучше было бы  конечно по моему унаследовать тулбар добавив пару новых функций...
а создавать новый тулбар с нуля мне не хочется

>А почему ты оставил возможность использовать ImageList?

Вариант с ImageList позволял менять картинки на кнопках, но приведенный мной пример позволяет эти кнопки создавать с уже нужными картинками поэтому я отказался от ImageLista
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 04-08-2004 08:37 » 

Цитата: USBLexus
Лучше было бы  конечно по моему унаследовать тулбар добавив пару новых функций...


Это всегда лучше и проще. Ага
Ну успехов.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #11 : 04-08-2004 08:56 » 

>Ну успехов
Взаимно ) Спасибо за помощь)
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
prottoss
Гость
« Ответ #12 : 27-10-2005 17:04 » 

А кто-нибудь знает, как помянять врешний вид кнопки тулбара, созданного с помощю WinApi CreateToolBarEx
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #13 : 27-10-2005 20:17 » 

Собственно MSDN
Цитата
The TB_CHANGEBITMAP message changes the bitmap for a button in a toolbar.

TB_CHANGEBITMAP 
wParam = (WPARAM) idButton;
lParam = (LPARAM) MAKELPARAM(iBitmap, 0);
 

Parameters

idButton

Command identifier of the button that is to receive a new bitmap.

iBitmap

Zero-based index of an image in the toolbar's image list. The system displays the specified image in the button.

 

Return Values

Returns TRUE if successful or FALSE otherwise.
« Последнее редактирование: 20-12-2007 20:45 от Алексей1153++ » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
prottoss
Гость
« Ответ #14 : 27-10-2005 23:48 » 

Я имел ввиду не битмап, а стиль отображения кнопки. В CreateToolBarEx есть 2-3 стиля (счас не помню названия макросов), а можно ли добавить стили кнопок, определенные для функции CreateWindows?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines