📄 titleshow.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 + -