Baderd94 Ответов: 1

Как я могу изменить цвет для определенной кнопки в моем диалоговом окне


У меня есть исходный файл под названием RoundBtn.cpp с его заголовочным файлом RoundBtn.h

эти два файла отвечают за окраску всех кнопок в моем диалоге. Что мне нужно сделать, так это придать одной из моих пуговиц особый цвет. Некоторые коды для раскрашивания всех кнопок приведены ниже.

void RoundBtn::DrawItem(LPDRAWITEMSTRUCT lp)
{
	CRect rc = lp->rcItem;
	CDC dc;
	dc.Attach(lp->hDC);
	dc.SetBkMode(TRANSPARENT);
	CBrush br;
	br.CreateStockObject(NULL_BRUSH);
	dc.SelectObject(&br);
	if (is_pressed) // when the button is pressed
	{
		CPen pen(PS_SOLID, 2, RGB(0,0,0));
		dc.SelectObject(&pen);
		CBrush *pBrush=new CBrush(RGB(220,100,220));
		dc.SelectObject(pBrush);
		dc.RoundRect(0, 0, rc.Width(), rc.Height(), rc.Height()/1, rc.Height()/1);  // Round the Buttons 
		dc.SetTextColor(RGB(0, 0, 0));


Что я уже пробовал:

Что я должен изменить в своем основном файле или что я должен вызвать в своем основном файле, чтобы раскрасить кнопку? адрес идентификатора кнопки таков
IDM_APPLY
и его функция такова

void CVCDlg::Apply1()
{

OnButtonApplyrange(); 

}

1 Ответов

Рейтинг:
12

Rick York

Цвет, используемый для построения кисти *pBrush, является тем, который необходимо настроить. Вы можете сделать цветовую переменную (COLORREF) членом класса RoundBtn и установить ее в 220,100,220 в конструкторе класса. Затем добавьте метод для установки цветового элемента, и вы можете иметь каждую кнопку другого цвета, если хотите.


Baderd94

Я добавил Это к своему RoundBtn.cpp файл

void RoundBtn::SetColor(COLORREF text, COLORREF bkgnd)
{
m_TextColor = текст;
m_BkgndColor = bkgnd;

if(m_hWnd != NULL)
Аннулировать();
}

затем я добавил Это к моему RoundBth.h

COLORREF m_TextColor;
COLORREF m_BkgndColor;

а это

void SetColor(COLORREF text, COLORREF bkgnd);

затем я добавил Это в свой основной файл

Loadbt1.SetColor(RGB(255,255,255),RGB(255,255,255));

где Loadbt1-это кнопка, которую я хочу раскрасить

он не показывает никакой ошибки но все равно не работает

Rick York

Вы забыли некоторые изменения в DrawItem - вместо того, чтобы при помощи RGB(220,100,220) :

CBrush *pBrush=новый CBrush( m_BkgndColor );

и измените вызов SetTextColor также на :

постоянного тока.SetTextColor( m_TextColor );

Кстати, белый цвет, вероятно, не самый лучший цвет для использования как для текста, так и для фона.

Baderd94

Спасибо за Ваш быстрый ответ

я изменил его, как вы упомянули, и это имело смысл для меня tbh, но он все еще не работает, он дает неокрашенный сейчас, любую идею, потому что я чувствую, что близок к получению правильного метода

Baderd94

Спасибо вам так много, что ваш метод работал отлично, проблема была в функции, в которую мне нужно было вставить код.