Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

Создание круглых кнопок и кнопок в виде элипса.

Автор: Chris Maunder

Sample Image

Вам захотелось в свою программу добавить какой-то нестандартности?. Можно начать с кнопок :) Два класса, которые здесь представлены, не что иное, как обыкновенная замена стандартному классу CButton. Всё, что от Вас требуется, это включить исходники в Ваш проект и прописать хедеры(#include).

После этого достаточно объявить ваш объект как CRoundButton или CEllipticalButton (для элипса)вместо обычного CButton.

Как видно из скриншота, по краям кнопка имеет плавный переход цвета, что добавляет её элегантности :) Ключевой момент - это алгоритм, по которому производится вычисление цвета:

COLORREF GetColour(double dAngle, COLORREF crBright, COLORREF crDark)
 
 {
 
 #define Rad2Deg	180.0/3.1415
 
 #define LIGHT_SOURCE_ANGLE -2.356    // -2.356 радиан = -135 градусов,
 
                                      // Т.е. с верхнего левого края экрана
 
 
 
 	ASSERT(dAngle > -3.1416 && dAngle < 3.1416);
 
 	double dAngleDifference = LIGHT_SOURCE_ANGLE - dAngle;
 
 
 
 	if (dAngleDifference < -3.1415) dAngleDifference = 6.293 + dAngleDifference;
 
 	else if (dAngleDifference > 3.1415) dAngleDifference = 6.293 - dAngleDifference;
 
 
 
 	double Weight = 0.5*(cos(dAngleDifference)+1.0);
 
 
 
 	BYTE Red   = (BYTE) (Weight*GetRValue(crBright) + (1.0-Weight)*GetRValue(crDark));
 
 	BYTE Green = (BYTE) (Weight*GetGValue(crBright) + (1.0-Weight)*GetGValue(crDark));
 
 	BYTE Blue  = (BYTE) (Weight*GetBValue(crBright) + (1.0-Weight)*GetBValue(crDark));
 
 
 
 	return RGB(Red, Green, Blue);
 
 }
 
 

Это простая линейная интерполяция между двумя цветами, основанная на косинусе угла между источником света и точкой. Углы измеряются от +ve x-оси (т.е. (1,0) = 0 градусов, (0,1) = 90 градусов ), не забудьте, что положительная y-координата идёт вниз.

 

Кнопки в виде элипса

Автор: Raghav Gupta

EllipticButtons.jpg (8697 bytes)

Данный пример основан на предыдущем классе, с той лишь разницей, что кнопки не круглые, а в виде элипса. Класс используется точно так же как предыдущий.

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS