15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Закрашиваем кнопки


Автор: Bob Ryan.

Скачать Исходник (3Kb) и Демонстрационный проект (13Kb)


Одна из проблем в архитектуре Windows - это невозможность закрашивать кнопки различными цветами. Класс представленный здесь не претендует на звание "передовой технологии", однако многие программисты нуждаются в таком классе (особенно при разработке приложений мультимедиа). Единственный способ рисовать цветные кнопки, это сделать собственный обработчик рисования кнопки (или создать bitmap кнопку, что само по себе не хорошо). Класс CColorButton позволяет Вам:

  • Задавать размеры и свойства кнопки.
  • Устанавливать цвет текста кнопки, цвет самой кнопки.

Содержимое класса

Класс содержит единственную функцию, Attach(), которая инициализирует собственный обработчик прорисовки кнопки. Обычно эта функция втавляется в диалоговый метод OnInitDialog().

 

BOOL Attach(const UINT nID, CWnd* pParent, 
            const COLORREF BGColor = RGB(192, 192, 192), 
            const COLORREF FGColor = RGB(1, 1, 1), 
            const COLORREF DisabledColor = RGB(128, 128, 128), 
            const UINT nBevel = 2);
Где:
  • nID - ID номер Вашей кнопки
  • pParent - родителькое окно.

    Следующие три параметра - это цвет самой кнопки, цвет текста на кнопке, и запрет на цвета по умолчанию (серая кнопка, чёрный текст ...).

  • nBevel (bevel width) (я пока не понял что это такое, но по умолчанию обычно 2).

Как пользоваться классом CColorButton

  • Добавьте в Ваш проект файлы colorBtn.h и colorBtn.cpp.
  • Нарисуйте кнопку в Developer Studio; проверьте, чтобы было отмечено свойство Owner-Draw.
  • Не забудьте добавить в Ваш основной файл .h строчку "#include colorbtn.h"
  • Так же добавьте в файл .h, следующие объявления (столько же, сколько у Вас будет кнопок)

    CColorButton m_btn1;
    CColorButton m_btn2;
    и т.д.

  • В функции OnInitDialog , инициализируем цвета:
   VERIFY(m_btn1.SetColors(IDOK, this, CLOUDBLUE, DKBLUE, WHITE));
   VERIFY(m_btn2.SetColors(IDCANCEL, this, DKBLUE, WHITE));

Замечание: цвета, используемые в данном примере - BLACK, WHITE, BLUE, DKGRAY, и т.д.. - это константы определённые в COLORREF , которые Вы можете определить с помощью макросов RGB():

	const COLORREF CLOUDBLUE = RGB(128, 184, 223);
	const COLORREF WHITE = RGB(255, 255, 255);
	const COLORREF BLACK = RGB(1, 1, 1);
	const COLORREF DKGRAY = RGB(128, 128, 128);
	const COLORREF etc...

Ограничения:

  • Невозможно поменять цвета кнопок когда окно уже создано.
  • Не поддерживает динамическую функцию Create().
  • Не поддерживается политра в 256 цветов.
  • Нет возможности задать различный шрифт для текста на кнопке.