Класс CMyLabel для практического применения

Создавая какое-либо приложение иногда требуется разместить прозрачную надпись в окне над красивой картинкой или просто на цветном фоне. Безусловно потребуется использовать GDI или GDI+ (оставим трехмерное поле деятельности для дальнейших рассуждений). и конечно же будем использовать MFC. Именно так мы и сделаем, мало того смена надписей у нас будет происходить различными эффектами.
        Эффект первый - вращение надписи, основан на обмане зрения. Плавно уменьшаем ширину шрифта до минимальной, изменяем текст, затем плавно восстанавливаем ширину шрифта. Вроде нет вращения, но наше воображение волей-неволей представляет эти изменения как вращение. На этом эффекте основано и вращение карт в карточных играх, без использования библиотек DirectX или OpenGL (хотя в принципе и DirectX и OpenGL используют аналогичный эффект, так как мониторы пока не объемные).
     Эффект второй - перемещение надписи вдаль и обратно. Плавно уменьшаем размер шрифта до 1, изменяем текст, плавно восстанавливаем размер шрифта. Опять же наше воображение воспринимает это гораздо красивее.
     Эффект третий - смывание надписи и восстановление ее. Здесь эффект достигается немного сложнее. Одним из способов создания этого эффекта - использование контуров.  BeginPath() --**-- EndPath().
	void CTestMyLabelDlg::OnPaint()
	{
		CPaintDC dc(this);
		dc.BeginPath();
		dc.Rectangle(&m_SimpleRect);
		dc.EndPath();
		dc.SelectClipPath(RGN_DIFF);
	}
    
    
Параметр RGN_DIFF позволяет нам отсекать контур образованный прямоугольником m_SimpleRect и после dc.EndPath() разрешает нам рисовать только вне этого прямоугольника. Размер прямоугольника может совпадает с размером габаритного прямоугольника надписи. m_SimpleRect может полностью  "закрыть" нашу надпись. Эффект смывания надписи получается так: сначала высота m_SimpleRect равна нулю, выводим произвольный текст, плавно увеличиваем высоту прямоугольника m_SimpleRect до тех пор пока текст полностью не исчезнет, изменяем надпись на новый текст, плавно уменьшаем высоту m_SimpleRect до нуля, тем самым открывая новую надпись.
     Эффект четвертый - скатывание и раскатывание надписи. Последовательно, по одному,  удаляем из текущего текста все символы, в памяти изменяем надпись и обратно последовательно, по одному,  символу выводим новый текст.

На основе выше сказанного предлагается класс CMyLabel, готовый к использованию в ваших приложениях. CMyLabel создан используя MFC на языке программирования С++. Подробный комментарий важных строк кода. Среда программирования Visual C++ 7.0 и выше.

эффекты смены текста

Файл исходника Размер Количество загрузок
cmylabel.rar 162 КБайт 3983

Книги по тематике

Эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14 Мейерс Скотт, 2016 Освоение C++11 и C++14 - это больше, чем просто ознакомление с вводимыми этими стандартами... Узнать больше »
Язык программирования C++. Специальное издание Страуструп Б., 2019 Книга написана Бьерном Страуструпом - автором языка программирования С++ - и является каноническим... Узнать больше »
Решение задач на современном C++ Бансила М., 2019 С++ — один из самых популярных языков программирования и используется в разных областях, таких... Узнать больше »
Программирование. Python. C++. Часть 4. Учебное пособие Поляков К.Ю., 2019 Книга представляет собой завершающую, четвёртую часть серии учебных пособий по программированию.... Узнать больше »
Яндекс цитирования Яндекс.Метрика