Здравствуйте, доброго времени суток.
Не так давно мне понадобился элемент управления, наподобие 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();
Функция вызывается при покидании контрола указателем мыши
Вот, в принципе, и все. Для того, чтобы добавить новый контрол в ваш проект, достаточно сделать следующее:
- Бросить на шаблон диалога в редакторе ресурсов элемент Static Text.
- У этого элемента изменить ID, данное ему средой по умолчанию IDC_STATIC на какое-нибудь другое
- Сопоставить визардом ему переменную
- Сменить вручную имя класса этой переменной, переправив его из CStatic на AxWinLib :: CAxStatic . Можно пространство имен AxWinLib включить в общее пространство имен директивой namespace.
После этого можете работать с контролом просто вызывая его методы и присваивая значения его свойствам.
Исходные тексты примера можно взять здесь, а исходники класса здесь.
На досуге попробую немного доработать класс, чтобы его можно было использовать в WTL проектах.
На этом закругляюсь. Всего наилучшего. |