Класс 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 КБайт 3926

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

Изучаем C++ через программирование игр Доусон М., 2018 Если вы хотите научиться программировать первоклассные игры, вам просто необходимо изучить... Узнать больше »
Объектно-ориентированное программирование на C++ Васильев Александр Николаевич, 2016 Представленная книга - о языке программирования C++. А еще эта книга - об объектно-ориентированном... Узнать больше »
C++. Полное руководство. Классическое издание Шилдт Герберт, 2018 Авторитетный профессионал и блестящий автор книг по программированию, Герберт Шилдт переработал... Узнать больше »
Современное проектирование на C++. Обобщенное программирование и прикладные шаблоны проектирования Александреску Андрей, 2016 В книге Современное проектирование на C++ Андрей Александреску открыл новые перспективы в области... Узнать больше »
Яндекс цитирования Rambler's Top100 Яндекс.Метрика