⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 titleshow.cpp

📁 在中小型电力行业系统中
💻 CPP
字号:
// TitleShow.cpp : implementation file
//

#include "stdafx.h"
#include "TitleShow.h"
#include "ZgMemDc.h"
#include "PublicClass.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

const int TIME_SPIN_SHOW = 100;
const int TIME_SPIN_HIDE = TIME_SPIN_SHOW/2;

/////////////////////////////////////////////////////////////////////////////
// CTitleShow

CTitleShow::CTitleShow()
{
	HLSCOLOR hls = CPublicClass::RGB2HLS(RGB(110,207,218));//DIALOG_BK_COLOR
    mi_ColorH = HLS_H(hls);
    mi_ColorL = HLS_L(hls);
	mi_ColorS = HLS_S(hls);

	mi_SpinValue = 5;
	
	mi_LightMax = mi_ColorL;
	mi_LightMin = 20;
	mi_ColorL = mi_LightMin;

	mi_TextIndex = 0;
	mi_Show = TRUE;

}

CTitleShow::~CTitleShow()
{
	SAFE_DELETE(m_pFnt);
}


BEGIN_MESSAGE_MAP(CTitleShow, CStatic)
	//{{AFX_MSG_MAP(CTitleShow)
	ON_WM_ERASEBKGND()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTitleShow message handlers

BOOL CTitleShow::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	CZgClientRect rcClient(this);
	rcClient.DeflateRect(2,2);
	CZgMemDC dcMem(pDC, &rcClient);

	dcMem.FillSolidRect(rcClient, RGB(0,0,0));//DIALOG_BK_COLOR

	COLORREF crText = CPublicClass::HLS2RGB(HLS(mi_ColorH, mi_ColorL, mi_ColorS));
	CString strText = m_TitleTextList.GetAt(mi_TextIndex);

	CFont *lp_OldFont; 
	COLORREF l_OldColor; 
	lp_OldFont = (CFont*)dcMem.SelectObject(m_pFnt);	

	CSize szText = dcMem.GetTextExtent(strText);
	CRect rcText = rcClient;

	int li_pos = 0;
	int li_workbreakCount = 0;
	do{
		li_pos = strText.Find("\n", li_pos);
		if (li_pos >= 0)
		{
			li_workbreakCount++;
			li_pos++;
		}
	}while(li_pos<strText.GetLength() && li_pos>=0);

	rcText.top = rcClient.Height()/2-(szText.cy/2*(li_workbreakCount+1));
	
	int bkmode = dcMem.SetBkMode(TRANSPARENT);
	l_OldColor = dcMem.SetTextColor(crText);
	dcMem.DrawText(strText, rcText, DT_VCENTER|DT_CENTER|DT_WORDBREAK);
	dcMem.SetBkMode(bkmode);
	dcMem.SetBkColor(l_OldColor);
	dcMem.SelectObject(lp_OldFont);
	 
	return TRUE; 
}

void CTitleShow::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if (nIDEvent == TIMER_DRAW)
	{
		if (mi_Show)
		{
			//显示增强
			if (mi_ColorL < mi_LightMax)
				mi_ColorL += mi_SpinValue;
			else
			{
				KillTimer(nIDEvent);
				mi_Show = FALSE;
				if (mi_TextIndex == m_TitleTextList.GetSize()-1)
					Sleep(1000);
				else
					Sleep(500);
				SetTimer(TIMER_DRAW, TIME_SPIN_HIDE, NULL);		//减弱显示
			}
		}
		else
		{
			//显示减弱
			if (mi_ColorL >= mi_LightMin)
				mi_ColorL -= mi_SpinValue;
			else
			{
				KillTimer(nIDEvent);
				mi_Show = TRUE;
				if (mi_TextIndex < m_TitleTextList.GetSize()-1)
					mi_TextIndex++;
				else
					mi_TextIndex = 0;
				Sleep(200);
				SetTimer(TIMER_DRAW, TIME_SPIN_SHOW, NULL);			//增强显示
			}
		}

		if (GetSafeHwnd())
		{
			CZgClientRect rcClient(this);
			rcClient.DeflateRect(2,2);
			InvalidateRect(rcClient);
		}
	}
	CStatic::OnTimer(nIDEvent);
}
 
void CTitleShow::StartShowMsg()
{
	SetTimer(TIMER_DRAW, TIME_SPIN_SHOW, NULL);
}

void CTitleShow::PreSubclassWindow() 
{ 
	m_pFnt = new CAutoFont("隶书");  
	m_pFnt->SetHeight(30);
	m_pFnt->SetWidth(20);
	m_pFnt->SetBold(TRUE);	
	CStatic::PreSubclassWindow(); 
}

void CTitleShow::TerminateShowMsg()
{
	KillTimer(TIMER_DRAW);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -