Научно-исследовательская лаборатория систем ЧПУ |
|||||||||||||||||
|
|||||||||||||||||
|
Класс CFlexButtonАвтор: Мартинов Г. М.
|
ПРИМЕЧАНИЕ Класс написан с использованием библиотеки MFC и может использоваться только в MFC-проектах. |
Чтобы воспользоваться кнопкой CFlexButton, в первую очередь, необходимо включить в проект заголовочный файл FlexButton.h и файл EnhMetafileButton.lib для линковки. Необходимо также, чтобы файл EnhMetafileButton.dll находился в каталоге с приложением.
На примере встраивания класса CFlexButton нужно проделать следующие шаги:
1. Добавить в класс диалога (или другого окна содержащего кнопку) объект класса CFlexButton.
#include "FlexButton.h" class CEnhMetafileButtonDlgDlg : public CDialog { protected: //: CFlexButton m_EngMetafileButton; // : } |
BOOL CEnhMetafileButtonDlgDlg::OnInitDialog() { // : //------- Enhanced Metafile Button init ------------------------------- CWnd *pFrame=GetDlgItem(IDC_ENH_METAFILE_BUTTON); CRect rcWnd; pFrame->GetWindowRect(rcWnd); pFrame->DestroyWindow();//pFrame was just a placeholder anyway. ScreenToClient(rcWnd); CString String; String.LoadString(IDS_ENH_MF_BUTTON_TEXT); m_EngMetafileButton.Create(String, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW|WS_TABSTOP| |
COLORREF m_BackColor // цвет фона для кнопки.
|
void CFlexButton::ChangeFlexButtonStyle(DWORD dwNewStyleFlag, BOOL blAdd = TRUE); dwNewStyleFlag // изменяемый флаг; |
blAdd - состояние флага. TRUE - установлен.
Получить текущий стиль можно методом:
const DWORD& CFlexButton::get_FlexButtonStyle();
|
Возможные флаги стилей:
FB_STYLE_SYSTEM_SELECT_FRAME - определяет, будет ли кнопка иметь системную рамку или собственную рамку, отрисованную с помощю пера m_DotPen.
FB_STYLE_USE_ENH_METAFILE - при установке этого флага на кнопке будет отрисовываться метафайл, иначе - текст.
FB_STYLE_ENABLE_HOTLIGHT - если указатель мыши находится над кнопкой, кнопка подсвечивается;
FB_STYLE_CHECKABLE - устанавливает поведение кнопки, превращая ее в кнопку с фиксацией.
FB_STYLE_FROST_CHECKABLE - если установлен этот стиль, кнопка становится fixed и не может быть отжата при повторном нажатии на неё (для того, чтобы отжать кнопку, требуется вызов методаCFlexButton::ChangeFlexButtonState().)
void CFlexButton::ChangeFlexButtonState(DWORD dwNewStateFlag, BOOL blAdd = TRUE);
|
dwNewStateFlag - изменяемый флаг состояния;
blAdd - если TRUE, то флаг будет установлен, иначе - сброшен.
Получить текущее состояние можно методом:
const DWORD& CFlexButton::get_FlexButtonState();
|
FB_STATE_HOTLIGHT - кнопка подсвечена
FB_STATE_CHECKED - кнопка нажата
BOOL CFlexButton::LoadEnhMetaFiles(LPCTSTR lpszMetaFileResource, LPCTSTR lpszMetaFileResourceSel, LPCTSTR lpszMetaFileResourceFocus, LPCTSTR lpszMetaFileResourceDisabled); |
lpszMetaFileResource - обязательный параметр. Содержит указатель на строку с именем метафайла для обычного состояния кнопки.
lpszMetaFileResourceSel - Содержит указатель на строку с именем метафайла для нажатого состояния кнопки. Может быть NULL.
lpszMetaFileResourceFocus - Содержит указатель на строку с именем метафайла для кнопки, имеющей фокус ввода. Может быть NULL.
lpszMetaFileResourceDisabled - Содержит указатель на строку с именем метафайла для кнопки в отключенном (disabled) состоянии. Может быть NULL.
Отрисовка кнопки производится вызовом:
void CFlexButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
|
В зависимости от того, должен ли выводиться метафайл или текст, вызываются внутренние методы MetaFileDrawItem или FlexTextDrawItem соответственно.
Класс определяет несколько методов обработки событий системы:
void CFlexButton::OnMouseMove(UINT nFlags, CPoint point);
|
Перегруженная функция CFlexButton::OnMouseMove() для подсветки. Вызывается в зависимости от того, включена подсветка или выключена.
CFlexButton::OnClicked(); |
Обрабатывает событие нажатие кнопки, если установлен стиль FB_STYLE_CHECKABLE
Лаборатория систем ЧПУ МГТУ "Станкин" © 2002-2024
Россия, Москва, Вадковский переулок, д. 3а Телефон: +7 (499) 972-9440 Факс: +7 (499) 972-1873 |