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

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

 

ButtonST - плоские кнопки


Автор: Davide Calabro'.

Требования: Win95/98 NT4, VC 5.0

ST_CButton flat

Описание

CButtonST это класс, наследуемый от MFC класса CButton.
С этим классом в Вашем приложении можно использовать как стандартные кнопки, так и необычные и плоские кнопки.

Возможности CButtonST:

  • Стандартные свойства CButton
  • поддержка иконок 16x16 32x32 48x48 16 и 256 цветов
  • Поддержка прозрачных кнопок
  • Изменение вида кнопки на лету с плоской в стандартную
  • Кнопка может иметь две иконки. Одна, когда курсор мыши на кнопке и другая, когда курсор за пределами кнопки.
  • Возможнось использования в DLL
  • Возможность динамического создания
  • Каждая кнопка может иметь собственный курсор
  • компилировалось в Visual C++ v5.0
  • Full source code included!
  • It's free!

Как включить CButtonST в Ваше приложение

    Добавьте в Ваш проект следующие файлы:
    
        BtnST.h
        BtnST.cpp
    
    С помощью редактора диалога создайте стандартную кнопку и назовите, например, IDOK
    (Вам не нужно создавать собственный прорисовщик кнопки) и создайте переменную член:
    
        CButtonST m_btnOk;
    
    Теперь с помощью редактора ресурсов, создайте иконку и назовите, например, IDI_OK256
    Так же Вы можете импортировать её из уже существующей, такой как в демопроекте
    (т.e. 32x32x256_Ok.ico).

    Используйте иконки размером 32x32 пикселей. Иконки друго размера будут отображаться
    неправильно.

    Теперь свяжите кнопку с CButtonST. В процедуре OnInitDialog:
    
        // Вызываем базовый метод
        CDialog::OnInitDialog();

        // Создаём кнопку IDOK
        m_btnOk.SubclassDlgItem(IDOK, this);
        // Устанавливаем иконку для кнопки
        m_btnOk.SetIcon(IDI_OK256);
    
    Вы можете использовать для одной кнопки. Первая иконка отображается когда
    курсор мышки находится на кнопке. Вторая иконка отображается когда
    курсор мышки находится за пределами кнопки. Если Вы используете одну и ту же иконку,
    но одну цветную, а другую чёрно белую, то получится красивый эффект!
    
        // Добавляем две иконки
        m_btnOk.SetIcon(IDI_OK256, IDI_OK256_BW);
    
    Иконки должны быть одинакового размера!

    По умолчанию на кнопке иконка будет располагаться слева, а текст справа.
    Если Вам нужно, чтобы иконка располагалась вверху, а текст внизу, то
    необходимо установить выравнивание кнопки:
    
        // Выравниваем иконку вертикально
        m_btnOk.SetAlign(CButtonST::ST_ALIGN_VERT);
    
    Так же, по умолчанию, кнопка будет иметь плоский стиль. Если Вам нужна
    стандартная кнопка, то используйте следующий код:
    
        // Рисуем стандартную кнопку
        m_btnOk.SetFlat(FALSE);
    
    Для плоских кнопок по умолчанию высвечивается бордюр, когда курсор мышки проходит
    над кнопкой. Вы можете запретить этот эффект (в примере это кнопка с CD-ROM!)
    
        // Не прорисовывать бордюр для кнопки
        m_btnOk.DrawBorder(FALSE);
    
    Для каждой кнопки можно установить собственные цвета.
        
        // Устанавливаем цвета кнопок
        COLORREF crStandard = ::GetSysColor(COLOR_BTNFACE);
        m_btnOk.SetInactiveBgColor(crStandard - RGB(20,20,20));
        m_btnOk.SetActiveBgColor(crStandard + RGB(20,20,20));
        m_btnOk.SetInactiveFgColor(RGB(0,255,0));
        m_btnOk.SetActiveFgColor(RGB(255,0,0));
    
    Каждая кнопка может иметь свой курсор.
    Например, кнопка, которая запускает интернет браузер, изменяет курсор мышки
    на ручку, при наведении на неё курсора!
    
        // Устанавливаем ручку вместо курсора
        m_btnOk.SetBtnCursor(IDC_HAND);
    
    Каждый приличный элемент управления должен иметь свой текст в виде подсказки!
    Небольшой текст отображается, когда курсор останавливается на кнопке.
    
        // Добавляем небольшой текст к кнопке
        m_btnOk.SetTooltipText(IDS_TT_OK);
    
    Для добавления красочности интерфейсу, можно задать прозрачность кнопке:
        
        // Делаем прозрачную кнопку
        m_btnOk.DrawTransparent();
    
    

CButtonST - функции члены

 

void SetIcon(int nIconInId, int nIconOutId = NULL)
Устанавливаем иконку(и) для кнопки

  • nIconInId
    Ресурс иконки (когда курсор мышки внутри)
  • nIconOutId
    Ресурс иконки (когда курсор мышки снаружи)
    Если NULL то будет использоваться только первая иконка

Пример:
m_btnOk.SetIcon(IDI_OK256);
m_btnOk.SetIcon(IDI_OK256, IDI_OK256_BW);
m_btnOk.SetIcon(NULL); // Для получения кнопки без иконки


void SetAlign(int nAlign)
Устанавливаем положение иконки (если она определена)

аргументы функции:

  • ST_ALIGN_HORIZ
    Иконка слева и текст справа (по умолчанию)
  • ST_ALIGN_VERT
    Иконка наверху и текст внизу

Пример:
m_btnOk.SetAlign(CButtonST::ST_ALIGN_VERT);

int GetAlign()
Получаем текущее положение иконки (смотрите SetAlign о возможных значениях)

Пример:
int nRetValue = m_btnOk.GetAlign();

void SetFlat(BOOL bState = TRUE)
Установить стиль кнопки ("плоский" или стандартный)

Аргументы функции:

  • TRUE
    Кнопка рисуется как "плоская" (по умолчанию)
  • FALSE
    Кнопка рисуется как стандартная

Пример:
m_btnOk.SetFlat();
m_btnOk.SetFlat(FALSE);


BOOL GetFlat()
Возвращает текущий стиль кнопки (смотрите SetFlat о возможных значениях)

Пример:
int nRetValue = m_btnOk.GetFlat();

void DrawBorder(BOOL bEnable = TRUE)
Отображение бордюра ON/OFF (только для "плоских" кнопок)

Входные значения:

  • TRUE
    Бордюр кнопки отображается (по умолчанию)
  • FALSE
    Бордюр не отображается

Пример:
m_btnOk.DrawBorder();
m_btnOk.DrawBorder(FALSE);


static const short GetVersionI()
static const char* GetVersionC()

Возвращает версию CButtonST

Пример:
int nVer = CButtonST::GetVersionI(); // Делённое на 10 для получения глобального номера версии
char szVer[20];
strcpy(szVer, CButtonST::GetVersionC());


void SetShowText(BOOL bShow = TRUE)
Добавить или удалить текст (caption) из кнопки

Входные значения:

  • TRUE
    Текст отображается
  • FALSE
    Текст не отображается (но существует!)

Пример:
m_btnOk.SetShowText();
m_btnOk.SetShowText(FALSE);


BOOL GetShowText()
Возвращает текущее состояние текста (отображается или нет)

Пример:
int nRetValue = m_btnOk.GetShowText();

void SetDefaultActiveFgColor()
Устанавливает цвет текста по умолчанию (когда курсор над кнопкой)
Она автоматически вызывается, когда создаётся кнопка.

Пример:
m_btnOk.SetDefaultActiveFgColor();

void SetDefaultActiveBgColor()
Устанавливает цвет кнопки по умолчанию (когда курсор над кнопкой)
Она автоматически вызывается, когда создаётся кнопка.

Пример:
m_btnOk.SetDefaultActiveBgColor();

void SetDefaultInactiveFgColor()
Устанавливает цвет текста по умолчанию (когда курсор за пределами кнопки)
Она автоматически вызывается, когда создаётся кнопка.

Пример:
m_btnOk.SetDefaultInactiveFgColor();

void SetDefaultInactiveBgColor()
Устанавливает цвет кнопки по умолчанию (когда курсор за пределами кнопки)
Она автоматически вызывается, когда создаётся кнопка.

Пример:
m_btnOk.SetDefaultInactiveBgColor();

void SetActiveFgColor(COLORREF crNew, BOOL bRepaint = FALSE)
Устанавливаем цвет текста (когда курсор над кнопкой)

Входные значения:

  • crNew
    Новый цвет
  • bRepaint
    Если TRUE , то кнопка немедленно перерисовывается

Пример:
m_btnOk.SetActiveFgColor(RGB(255, 255, 0));

void SetActiveBgColor(COLORREF crNew, BOOL bRepaint = FALSE)
Устанавливаем цвет кнопки (когда курсор над кнопкой)

Входные значения:

  • crNew
    Новый цвет
  • bRepaint
    Если TRUE , то кнопка немедленно перерисовывается  

Пример:
m_btnOk.SetActiveBgColor(RGB(128, 128, 128));
m_btnOk.SetActiveBgColor(::GetSysColor(COLOR_BTNFACE), TRUE);


void SetInactiveFgColor(COLORREF crNew, BOOL bRepaint = FALSE)
Устанавливаем цвет текста (когда курсор за пределами кнопки)

Входные значения:

  • crNew
    Новый цвет 
  • bRepaint
    Если TRUE , то кнопка немедленно перерисовывается

Пример:
m_btnOk.SetInactiveFgColor(RGB(255, 255, 255));

void SetInactiveBgColor(COLORREF crNew, BOOL bRepaint = FALSE)
Устанавливаем цвет кнопки (когда курсор за пределами кнопки)

Входные значения:

  • crNew
    Новый цвет
  • bRepaint
    Если TRUE , то кнопка немедленно перерисовывается

Пример:
m_btnOk.SetInactiveBgColor(RGB(128, 128, 128));

const COLORREF GetActiveFgColor()
Возвращает текущий цвет текста (когда курсор над кнопкой)

Пример:
COLORREF crCurrent = m_btnOk.GetActiveFgColor();

const COLORREF GetActiveBgColor()
Возвращает текущий цвет кнопки (когда курсор над кнопкой)

Пример:
COLORREF crCurrent = m_btnOk.GetActiveBgColor();

const COLORREF GetInactiveFgColor()
Возвращает текущий цвет текста (когда курсор за пределами кнопки)

Пример:
COLORREF crCurrent = m_btnOk.GetInactiveFgColor();

const COLORREF GetInactiveBgColor()
Возвращает текущий цвет кнопки (когда курсор за пределами кнопки)

Пример:
COLORREF crCurrent = m_btnOk.GetInactiveBgColor();

void SetFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint = FALSE)
Разрешить/Запретить прорисовку фокуса
Это имеет значение только для "плоских" кнопок; на стандартных кнопках всегда рисуется фокус.

Входные значения:

  • bDrawFlatFocus
    Когда TRUE , то "плоские" кнопки будут иметь фокус
    По умолчанию "плоские" кнопки не имеют прямоугольника фокуса
  • bRepaint
    Если TRUE , то кнопка немедленно перерисовывается

Пример:
m_btnOk.SetFlatFocus(TRUE);
m_btnOk.SetFlatFocus(FALSE, TRUE);


BOOL GetFlatFocus()
Возвращает состояние фокуса
Это имеет значение только для "плоских" кнопок; на стандартных кнопках всегда рисуется фокус.

Возвращаемые знацения:

  • TRUE
    Фокус прорисовывается
  • FALSE
    Фокус не прорисовывается

Пример:
BOOL bDrawFlatFocus = m_btnOk.GetFlatFocus();

BOOL SetBtnCursor(int nCursorId = -1)
Присваивает определённый курсор кнопке
Курсор мышки изменяется про попадании на кнопку.

Входные значения:

  • nCursorId
    Идентификатор ресурса иконки

Выходные значения:

  • TRUE
    Курсор присвоен
  • FALSE
    Не удаётся загрузить ресурс курсора

Пример:
BOOL bRetValue = m_btnOk.SetBtnCursor(IDC_HAND);
m_btnOk.SetBtnCursor(); // Для удаления присвоенного курсора


void SetTooltipText(int nId, BOOL bActivate = TRUE)
void SetTooltipText(CString* spText, BOOL bActivate = TRUE)

Приваиваем небольшой текст кнопки

Входные значения:

  • nId
    Ресурс строки, содержащей текст
  • spText
    Указатель на объект CString содержащий небольшой текст (не может быть NULL)
  • bActivate
    Если TRUE текст активен (и показывается, когда курсор останавливается над кнопкой)

Используйте ActivateTooltip(), чтобы разрешить/запретить текст (см. ниже)

Пример:
m_btnOk.SetTooltipText(IDS_TT_OK);
m_btnOk.SetTooltipText(&CString("Some text"), FALSE); // Assign a tooltip but create it disabled


void ActivateTooltip(BOOL bEnable = TRUE)
Разрешить/Запретить отображение краткого текста

Входные значения:

  • bEnable
    Если TRUE - текст будет активным (и показываться, если курсор мышки остановится на кнопке)

Пример:
m_btnOk.ActivateTooltip(FALSE);

void DrawTransparent()
Рисует кнопку прозрачной

Пример:
m_btnOk.DrawTransparent();

Downloads

Скачать демо-проект - 249 KB