Главная
Новости
Программы
Проекты
Статьи
Ссылки
Контакты
Гостевая
Выпуск №7. Расширение класса CStatic (MFC)

Здравствуйте, доброго времени суток.

Не так давно мне понадобился элемент управления, наподобие TLabel в Delphi. То есть этот элемент должен был способен отображать текст различными шрифтами и цветом и обрабатывать события WM _ MOUSEHOVER и WM _ MOUSELEAVE .

В принципе ничего особенно сложного в таком элементе нет. Можно было бы поискать похожий на каких-нибудь ресурсах, на том же codeproject , но я решил не лениться и сделать такой простенький элемент сам

Итак, был создан класс, унаследованный от CStatic. Класс я назвал CAxStatic и размещен он в пространстве имен AxWinLib. Вот описание класса:

CAxStatic();

Конструктор

enum EXSTYLES {EX_BOLD = 2, EX_ITALIC = 4, EX_STRIKEOUT = 8, EX_UNDERLINE = 16 };

Расширенные стили контрола . Думаю , что здесь все понятно .

void SetExStyle(DWORD dwExStyle)

Установить расширенные стили

DWORD GetExStyle() const

Получить расширенные стили

void SetCaption(const CString& sCaption)

Установить текст. То же самое можно сделать функцией SetWindowText базового класса CWnd

CString GetCaption () const

Получить текст. То же самое можно сделать функцией Get WindowText базового класса CWnd

void SetFontFace(const CString& sFontFace)

Установить шрифт текста. Шрифт указывается как строка, например " Times New Roman "

CString GetFontFace() const

Получить шрифт текста . Возвращается текстовое значение наименования шрифта

void SetFontColor(COLORREF clFontColor)

Установить цвет текста .

COLORREF GetFontColor() const

Получить цвет текста

void SetFontSize ( LONG lFontSize )

Установить размер шрифта

LONG GetFontSize() const

Получить размер шрифта

void SetCursor ( HCURSOR hCursor )

Установить курсор, который будет отображаться при наведении курсора на контрол

HCURSOR GetCursor () const

Получить курсор, сопоставленный контролу

DWORD ExStyle ;

CString Caption;

CString FontFace;

COLORREF FontColor;

LONG FontSize;

HCURSOR Cursor;

Эти свойства по сути дублируют описанные выше функции set/get. Использование свойств возможно только в VC++ версии 6 и выше.

virtual void PreDrawText(LOGFONT& lf);

Эту функцию можно переопределить, чтобы непосредственно перед отрисовкой текста можно было его "подправить". Подробности смотрите в описании структуры LOGFONT в MSDN

virtual void OnMouseHover ();

Функция вызывается при наведении указателя мыши на контрол

virtual void OnMouseLeave();

Функция вызывается при покидании контрола указателем мыши

Вот, в принципе, и все. Для того, чтобы добавить новый контрол в ваш проект, достаточно сделать следующее:

  1. Бросить на шаблон диалога в редакторе ресурсов элемент Static Text.
  2. У этого элемента изменить ID, данное ему средой по умолчанию IDC_STATIC на какое-нибудь другое
  3. Сопоставить визардом ему переменную
  4. Сменить вручную имя класса этой переменной, переправив его из CStatic на AxWinLib :: CAxStatic . Можно пространство имен AxWinLib включить в общее пространство имен директивой namespace.

После этого можете работать с контролом просто вызывая его методы и присваивая значения его свойствам.

Исходные тексты примера можно взять здесь, а исходники класса здесь.

На досуге попробую немного доработать класс, чтобы его можно было использовать в WTL проектах.

 

На этом закругляюсь. Всего наилучшего.

Используются технологии uCoz