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

📄 movestatic.cpp

📁 一个完整的数字硬盘录像机系统软件
💻 CPP
字号:
// MoveStatic.cpp : implementation file
//

#include "stdafx.h"
#include "MoveStatic.h"

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

#define SCROLLAMOUNT				-1
#define DISPLAY_SLOW				70
#define DISPLAY_MEDIUM				40
#define DISPLAY_FAST				10
#define DISPLAY_SPEED				DISPLAY_MEDIUM

#define RED						RGB(255,0,0)
#define GREEN					RGB(0,255,0)
#define BLUE					RGB(0,0,255)
#define WHITE   				RGB(255,255,255)
#define YELLOW  				RGB(255,255,0)
#define TURQUOISE 				RGB(0,255,255)
#define PURPLE  				RGB(255,0,255)
#define BLACK       			RGB(0,0,0)

#define BACKGROUND_COLOR        BLACK
#define TOP_LEVEL_TITLE_COLOR	RED
#define TOP_LEVEL_GROUP_COLOR   YELLOW
#define GROUP_TITLE_COLOR       TURQUOISE
#define NORMAL_TEXT_COLOR		WHITE

#define TOP_LEVEL_TITLE_HEIGHT	32		
#define TOP_LEVEL_GROUP_HEIGHT  21     
#define GROUP_TITLE_HEIGHT    	19     
#define	NORMAL_TEXT_HEIGHT		17
#define TOP_LEVEL_TITLE			'\n'
#define TOP_LEVEL_GROUP         '\r'
#define GROUP_TITLE           	'\t'
#define NORMAL_TEXT				'\f' 
#define DISPLAY_BITMAP			'\b'
////////////////////////////////////////////////
//
////////////////////////////////////////////////
////////////////////////////////////////////////
//
////////////////////////////////////////////////
CMoveStatic::CMoveStatic()
{
  m_arArrCredit.SetSize(0);
}

CMoveStatic::~CMoveStatic()
{
}
////////////////////////////////////////////////
//
////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CMoveStatic, CStatic)
	//{{AFX_MSG_MAP(CMoveStatic)
	ON_WM_PAINT()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
////////////////////////////////////////////////
//
////////////////////////////////////////////////
void CMoveStatic::Init()
{
	nCurrentFontHeight = NORMAL_TEXT_HEIGHT;
	CClientDC dc(this);
	m_dcMem.CreateCompatibleDC(&dc);
	m_bProcessingBitmap=FALSE;
	nArrIndex=0;
	nCounter=1;
	nClip=0;
	m_bFirstTime=TRUE;
	m_bDrawText=FALSE;
	m_hBmpOld = 0;
	GetClientRect(&m_ScrollRect);
	SetTimer(DISPLAY_TIMER_ID,DISPLAY_SPEED,NULL);
}
////////////////////////////////////////////////
//
////////////////////////////////////////////////
void CMoveStatic::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	dc.SetBkMode(TRANSPARENT);
    CFont m_fntArial;
	CFont* pOldFont;
	BOOL bSuccess;
	BOOL bUnderline;
	BOOL bItalic;
	if (!m_szWork.IsEmpty())
	switch (m_szWork[m_szWork.GetLength()-1] )
	{
		case NORMAL_TEXT:
		default:
			bItalic = FALSE;
			bUnderline = FALSE;
			nCurrentFontHeight = NORMAL_TEXT_HEIGHT;
   			bSuccess = m_fntArial.CreateFont(NORMAL_TEXT_HEIGHT, 0, 0, 0, 
   								FW_THIN, bItalic, bUnderline, 0, 
   								GB2312_CHARSET,
                               	OUT_DEFAULT_PRECIS,
                               	CLIP_DEFAULT_PRECIS,
                               	PROOF_QUALITY,
                               	VARIABLE_PITCH | 0x04 | FF_DONTCARE,
                               	(LPSTR)"楷体_GB2312");
			dc.SetTextColor(NORMAL_TEXT_COLOR);
			pOldFont  = dc.SelectObject(&m_fntArial);
			break;
		case TOP_LEVEL_GROUP:
			bItalic = FALSE;
			bUnderline = FALSE;
			nCurrentFontHeight = TOP_LEVEL_GROUP_HEIGHT;
   			bSuccess = m_fntArial.CreateFont(TOP_LEVEL_GROUP_HEIGHT, 0, 0, 0, 
   								FW_BOLD, bItalic, bUnderline, 0, 
   								GB2312_CHARSET,
                               	OUT_DEFAULT_PRECIS,
                               	CLIP_DEFAULT_PRECIS,
                               	PROOF_QUALITY,
                               	VARIABLE_PITCH | 0x04 | FF_DONTCARE,
                               	(LPSTR)"楷体_GB2312");
			dc.SetTextColor(TOP_LEVEL_GROUP_COLOR);
			pOldFont  = dc.SelectObject(&m_fntArial);
			break;
		case GROUP_TITLE:
			bItalic = FALSE;
			bUnderline = FALSE;
			nCurrentFontHeight = GROUP_TITLE_HEIGHT;
   			bSuccess = m_fntArial.CreateFont(GROUP_TITLE_HEIGHT, 0, 0, 0, 
   								FW_BOLD, bItalic, bUnderline, 0, 
   								GB2312_CHARSET,
                               	OUT_DEFAULT_PRECIS,
                               	CLIP_DEFAULT_PRECIS,
                               	PROOF_QUALITY,
                               	VARIABLE_PITCH | 0x04 | FF_DONTCARE,
                               	(LPSTR)"楷体_GB2312");
			dc.SetTextColor(GROUP_TITLE_COLOR);
			pOldFont  = dc.SelectObject(&m_fntArial);
			break;
		case TOP_LEVEL_TITLE:
			bItalic = FALSE;
			bUnderline = TRUE;
			nCurrentFontHeight = TOP_LEVEL_TITLE_HEIGHT;
			bSuccess = m_fntArial.CreateFont(TOP_LEVEL_TITLE_HEIGHT, 0, 0, 0, 
								FW_BOLD, bItalic, bUnderline, 0, 
								GB2312_CHARSET,
	                           	OUT_DEFAULT_PRECIS,
	                           	CLIP_DEFAULT_PRECIS,
	                           	PROOF_QUALITY,
	                           	VARIABLE_PITCH | 0x04 | FF_DONTCARE,
	                           	(LPSTR)"楷体_GB2312");
			dc.SetTextColor(TOP_LEVEL_TITLE_COLOR);
			pOldFont  = dc.SelectObject(&m_fntArial);
			break;
		case DISPLAY_BITMAP:
			if (!m_bProcessingBitmap)
			{
				CString szBitmap = m_szWork.Left(m_szWork.GetLength()-1);
	   			if (!m_bmpWork.LoadBitmap((const char *)szBitmap))
				{
					CString str; 
					str.Format("Could not find bitmap resource \"%s\". "
                               "Be sure to assign the bitmap a QUOTED resource name", szBitmap); 
					KillTimer(DISPLAY_TIMER_ID); 
					MessageBox(str); 
					return; 
				}
				m_bmpCurrent = &m_bmpWork;
	   			m_bmpCurrent->GetObject(sizeof(BITMAP), &m_bmpInfo);
				m_size.cx = m_bmpInfo.bmWidth;	// width  of dest rect
				RECT workRect;
				GetClientRect(&workRect);
				ClientToScreen(&workRect);
				ScreenToClient(&workRect);
				// upper left point of dest
				m_pt.x = (workRect.right - 
							((workRect.right-workRect.left)/2) - (m_bmpInfo.bmWidth/2));
				m_pt.y = workRect.bottom;
				pBmpOld = m_dcMem.SelectObject(m_bmpCurrent);
				if (m_hBmpOld == 0)
					m_hBmpOld = (HBITMAP) pBmpOld->GetSafeHandle();
				m_bProcessingBitmap = TRUE;
			}
			break;
	}
	CBrush bBrush(BLUE);
	CBrush* pOldBrush;
	pOldBrush  = dc.SelectObject(&bBrush);
	// Only fill rect comprised of gap left by bottom of scrolling window
	r=m_ScrollRect;
	r.top = r.bottom-abs(SCROLLAMOUNT); 
	dc.DPtoLP(&r);
	
	if (m_bFirstTime)
	{
		m_bFirstTime=FALSE;
		dc.FillRect(&m_ScrollRect,&bBrush);
	}
	else
		dc.FillRect(&r,&bBrush);
	r=m_ScrollRect;
	r.top = r.bottom-nClip;
	if (!m_bProcessingBitmap)
	{
		int x = dc.DrawText((const char *)m_szWork,m_szWork.GetLength()-1,&r,DT_TOP|DT_CENTER|
					DT_NOPREFIX | DT_SINGLELINE);	
		m_bDrawText=FALSE;
	}
	else
	{
    	dc.StretchBlt( m_pt.x, m_pt.y-nClip, m_size.cx, nClip, 
                   		&m_dcMem, 0, 0, m_bmpInfo.bmWidth-1, nClip,
                   		SRCCOPY );
		if (nClip > m_bmpInfo.bmHeight)
		{
			m_bmpWork.DeleteObject();
			m_bProcessingBitmap = FALSE;
			nClip=0;
			m_szWork.Empty();
			nCounter=1;
		}
		dc.SelectObject(pOldBrush);
		bBrush.DeleteObject();
		return;
	}
	dc.SelectObject(pOldBrush);
	bBrush.DeleteObject();
	if (!m_szWork.IsEmpty())
	{
		dc.SelectObject(pOldFont);
		m_fntArial.DeleteObject();
	}
}
////////////////////////////////////////////////
//
////////////////////////////////////////////////
void CMoveStatic::OnTimer(UINT nIDEvent) 
{
	if (!m_bProcessingBitmap)
	if (nCounter++ % nCurrentFontHeight == 0)	 // every x timer events, show new line
	{
		nCounter=1;
		m_szWork = m_arArrCredit[nArrIndex++];
		//if (nArrIndex > ARRAYCOUNT-1)
		if(nArrIndex>=m_arArrCredit.GetSize())
			nArrIndex=0;
		nClip = 0;
		m_bDrawText=TRUE;
	}
	ScrollWindow(0,SCROLLAMOUNT,&m_ScrollRect,&m_ScrollRect);
	nClip = nClip + abs(SCROLLAMOUNT);	
    CRect r;
    GetClientRect(&r);
    ClientToScreen(r);
    ScreenToClient(&r);
    InvalidateRect(r,FALSE); // FALSE does not erase background
	CStatic::OnTimer(nIDEvent);
}
////////////////////////////////////////////////
//
////////////////////////////////////////////////
BOOL CMoveStatic::DestroyWindow() 
{
	KillTimer(DISPLAY_TIMER_ID);
    m_dcMem.SelectObject(CBitmap::FromHandle(m_hBmpOld));
    m_bmpWork.DeleteObject();
	return CStatic::DestroyWindow();
}
////////////////////////////////////////////////
//
////////////////////////////////////////////////

⌨️ 快捷键说明

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