Научно-исследовательская лаборатория систем ЧПУ
Научно-исследовательская лаборатория систем ЧПУ

Поиск по сайту:
 

Расписание курсов "Программирование SINUMERIK 810D/840D/840Di"



Объемная кнопка CStyleButton

Авторы: Бабак Д.А., Козак Н.В.
Кафедра КСУ, МГТУ "СТАНКИН"
Опубликовано: 19.05.2003
Версия текста: 1.0

Тестовое приложение CStyleButton_Test

Скачать библиотеку  размер файла: 22,1 Kб

Введение

В данном документе описывается элемент управления кнопка CStyleButton объемного стиля. CStyleButton - полноценная объемная кнопка ОС Windows. Кнопка моделирует освещение цилиндрической поверхности под различными углами к горизонту. Выпуклость кнопки изменяется от нулевой, до полукруглой. Минимальная освещённость кнопки так же варьируется. Для работы с кнопкой необходимо использовать библиотеку NCViewPanel.dll. Соглашение об использовании.

Соглашение об использовании

Разрешается использовать библиотеку NCViewPanel.dll в программных проектах (в том числе коммерческих) со ссылкой на разработчика.

Принцип отрисовки

Для придания элементу управления объемной (цилиндрической) формы используется следующая схема расчета освещенности (см. Рис. 1).


Рис. 1

Обозначения:

H - высота кнопки;

R - радиус воображаемой цилиндрической поверхности кнопки;

F - фронтальная плоскость кнопки;

S - воображаемый источник света;

Jmax - точка с максимальной интенсивностью освещённости - зенит;

Jmin - точка с минимальной интенсивностью освещённости;

h - текущая высота, при отрисовке кнопки;

- угол освещения;

- текущий угол при отрисовке кнопки;

- угол выпуклости кнопки.

На цилиндрической поверхности элемента управления выделяется наиболее освещённая его часть (зенит), и от неё идет постепенное уменьшение интенсивности освещёния до какого-то минимального значения.

Т.о. возможно принять интенсивность освещённости (J) самой освещённой части (зенита) за единицу. А интенсивности отраженного света будет пропорциональна косинусу угла ( -).

В схеме приняты следующие допущения:

  • все лучи от источника света идут параллельно
  • интенсивность освещенности участков, на которые не падают лучи от источника, равна некоторой начальной минимальной величине интенсивности (Jmin).

Итак, входными параметрами для данной задачи будут являться:

- угол освещения;

- угол выпуклости кнопки и

H - размер самого элемента управления.

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


Угол является текущим углом при рисовании фона кнопки. Этот угол характеризует некоторую горизонтальную линию. Весь фон кнопки состоит из горизонтальных линий, яркость цвета которых зависит от удалённости данной линии от линии с максимальной освещённостью.


где h ограничено,H/2>h>0.Начальным значением является угол .

Таким образом, последовательно сверху вниз рисуем горизонтальные линии, яркость которых будет зависеть от величин углов и .Текущая величина интенсивности освещенности линии вычисляется следующим образом:


Использование библиотеки в приложении

Библиотека NCViewPanel.dll предоставляет следующие возможностей по изменению внешнего вида кнопки (элемента управления):

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

В библиотеке реализован механизм двойной буферизации, который предотвращает мерцание при перерисовке.

Чтобы использовать базовые возможности библиотеки NCViewPanel.dll необходимо сделать следующее:

  1. Создать элемент управления, который необходимо изменить. Для этого требуется подключить к проекту NCViewPanel.dll, NCViewPanel.lib и заголовочный файл NCViewPanel.h. Объявить переменную класса CStyleButton.
CStyleButton m_Btn;

  1. В функции инициализации выполнить связывание объекта типа CStyleButton с элементом управления:
m_Btn.SubclassDlgItem(IDC_BUTTON1, this);

  1. Далее используем функции настройки вида кнопки. Вначале устанавливаем базовый цвет кнопки, соответствующие уголы, задаём текст (Рис. 2).
m_Btn.BackColor = RGB(255, 224, 113);

m_Btn.SetTau(90);

m_Btn.SetGamm(10);

m_Btn.strTextBtn = "BIG BIGnTEXT" ;

m_Btn.SetFont(10,"Times New Roman");


Рис. 2

Функциональность класса CStyleButton

Класс CStyleButton содержит следующую функциональность.

Функции для работы с освещённостью

Позволяют изменить цвет, угол падения света, радиус выпуклости (вогнутости).

void SetBaseColor(COLORREF Color)

Устанавливает базовый цвет кнопки и минимальную её освещённость.

Parameters

COLORREF Color

Базовый цвет кнопки.

void SetGamm(double Gamm)

Задаёт угол освещения цилиндрической кнопки источником света.

Parameters

double Gamm

Угол освещения. При условии, что источник света находится сверху от цилиндрической кнопки и этот параметр лежит в пределах [0;90], то цилиндрическая кнопка будет выглядеть как выпуклый цилиндр. При тех же условиях, но при этом параметре лежащем в приделах [0;-90], цилиндрическая кнопка будет выглядеть как вогнутый цилиндр.

void SetTau(double Tau)

Задаёт радиус цилиндрической кнопки, учитывая её высоту.

Parameters

double Tau

Угол между двумя линиями, проходящими через центр окружности цилиндра кнопки. Одна из которых проходит через среднюю линию прямоугольника кнопки, а другая через одну из горизонтальных её сторон (см. Рис. 1).

void SetMinIntens(int Jmin)

Задаёт минимальную интенсивность освещённости.

Parameters

int Jmin

Минимальная интенсивность освещения кнопки. Задаётся в процентах от 0 до 100.

Функции для работы со шрифтом

void SetFont(LOGFONT* lpLf = NULL)

void SetFont(double SizeFont, CString NameFont = "Arial")

Эти функции задают шрифт текста кнопки. Первая из них обладает расширенными возможностями для создания шрифта.

Parameters

LOGFONT* lpLf

Указатель на структуру описывающую шрифт текста.

double SizeFont

Размер символов шрифта в пунктах (эти единицы используются, например в MSWord, одна единица составляет 1/72 дюйма).

CString NameFont

Задаёт имя шрифта.

LPLOGFONT GetCurLf()

Функция возвращает текущий шрифт кнопки.

Return Values

Возвращает структуру, определяющую шрифт кнопки.

Свойства для работы с цветом и текстом

Предоставляют пользователю возможность работы с цветами кнопки с помощью своих get put методов.

COLORREF BackColor

Позволяет взять/установить цвет кнопки.

COLORREF FontColor

Позволяет взять/установить цвет шрифта текста кнопки.

CString strTextBut

Позволяет взять/установить текст, выводимый на кнопке.


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