Исходные коды программ и игр

Программирование - работа и хобби

CMyLabel - класс графических эффектов смены текста

Язык программирования C++

База построения С++, MFC, GDI

Работа класса С++ CMyLabel Создавая какое-либо приложение иногда требуется разместить прозрачную надпись в окне над красивой картинкой или просто на цветном фоне. Текстовая метка CMyLabel построена на базе MFC (Microsoft Foundation Classes), для графических эффектов применена библиотека GDI. Замена текста данной метки будет происходить с различными эффектами. Текстовая надпись класса CMyLabel украсит любое окно приложения Windows.

Эффект - вращение надписи

Эффект первый - вращение надписи, основан на обмане зрения. Плавно уменьшаем ширину шрифта до минимальной, изменяем текст, затем плавно восстанавливаем ширину шрифта. На самом деле вращение не происходит, но наше воображение волей-неволей представляет эти изменения как вращение. На этом эффекте основано и вращение карт в карточных играх, без использования библиотек 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, полностью готовый к использованию в программировании ваших приложениях. CMyLabel создан при помощи MFC на языке программирования С++. Класс CMyLabel был использован при написании карточных игр NineK, BuraK. В этих играх можно наглядно увидеть красивые эффекты смены текста. CMyLabel можно применить и в .NET программировании, если одеть его в оболочку динамической библиотеки .dll

Исходник имеет подробный комментарий важных строк кода. Среда программирования Visual C++ 7.0, Visual Studio .NET 2003 и выше.

Файл загрузки Размер Кол-во загрузок
cmylabel_vs7.zip 💾 178Кбайт 3990