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

📄 scrolllabel.cpp

📁 一些关于C++开发的多媒体制作书籍的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	return &this->m_Font;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:SetBkColor
* 函数介绍:设定背景色
* 输入参数:
            COLORREF crColor, 新背景色
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::SetBkColor(COLORREF crColor)
{
	m_crBkColor=crColor;

	// Reset bk brush
	if (m_hBrush)
		::DeleteObject(m_hBrush);
	m_hBrush = ::CreateSolidBrush(m_crBkColor);

	m_InnerLabel.Invalidate();
	this->Invalidate();
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:GetBkColor
* 函数介绍:返回当前底色
* 输入参数:无
* 输出参数:无
* 返回值  :当前底色
*/
COLORREF CScrollLabel::GetBkColor() const
{
	return this->m_crBkColor;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:SetTextColor
* 函数介绍:设定文字颜色
* 输入参数:
            COLORREF crColor, 新文字颜色
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::SetTextColor(COLORREF crColor)
{	
	m_crTextColor=crColor;
	m_InnerLabel.Invalidate();
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:GetTextColor
* 函数介绍:返回当前文字颜色
* 输入参数:无
* 输出参数:无
* 返回值  :当前文字颜色
*/
COLORREF CScrollLabel::GetTextColor() const
{
	return this->m_crTextColor;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:SetStep
* 函数介绍:设置步长
* 输入参数:
            UINT nStep, 新步长
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::SetStep(UINT uStep)
{
	this->m_uStep = uStep;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:GetStep
* 函数介绍:返回当前步长
* 输入参数:无
* 输出参数:无
* 返回值  :当前文字步长
*/
UINT CScrollLabel::GetStep(void) const
{
	return this->m_uStep;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:SetTick
* 函数介绍:设置速度
* 输入参数:
            UINT nTick, 新速度
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::SetTick(UINT uTick)
{
	this->m_uTick = uTick;
	this->SetTimer((int)this, this->m_uTick, NULL);
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:GetTick
* 函数介绍:返回当前速度
* 输入参数:无
* 输出参数:无
* 返回值  :当前文字速度
*/
UINT CScrollLabel::GetTick(void) const
{
	return this->m_uTick;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:SetScrollStyle
* 函数介绍:设置Scroll效果
* 输入参数:
            UINT nStyle, 新Scroll效果
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::SetScrollStyle(UINT nStyle)
{
	ASSERT(nStyle < SL_STYLENUM);
	m_uScrollStyle=nStyle;
	CRect rect;
	this->GetClientRect(&rect);

	switch (this->m_uScrollStyle)
	{
	case SL_NONE:
		// Stop the timer
		this->KillTimer((int)this);

		// Reset the size of m_InnerRect and move it to (0,x)
		m_InnerRect.right = m_InnerRect.left + rect.Width();
		m_InnerRect.OffsetRect(-m_InnerRect.left, 0);

		// Move m_InnerLabel to the rect specified by m_InnerRect
		m_InnerLabel.MoveWindow(&m_InnerRect);

		// Reset text align
		this->SetTextHAlign(this->m_uTextHAlign);

		break;
	case SL_HSCROLLLEFT:
	case SL_HSCROLLRIGHT:
	case SL_HSCROLLBOTH:
		// Set text align to Left&NoWrap
		m_InnerLabel.ModifyStyle(SS_CENTER | SS_RIGHT, SS_LEFT | SS_LEFTNOWORDWRAP);
		
		// Reset the size of m_InnerRect and horizontally move it
		this->CalculateTextSize();
		m_InnerRect.OffsetRect(-m_InnerRect.left, 0);

		m_bLeft = false;
		// Move m_InnerLabel to the rect specified by m_InnerRect
		m_InnerLabel.MoveWindow(&m_InnerRect);

		this->SetTimer((int)this, this->m_uTick, NULL);
		break;
	case SL_HSCROLLAUTO:
		break;
	default:
		break;
	}
	m_InnerLabel.Invalidate();
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:GetScrollStyle
* 函数介绍:返回当前Scroll效果
* 输入参数:无
* 输出参数:无
* 返回值  :当前Scroll效果
*/
UINT CScrollLabel::GetScrollStyle() const
{
	return this->m_uScrollStyle;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:SetTextHAlign
* 函数介绍:设定水平对齐方式
* 输入参数:
            UINT nTextHAlign, 新水平对齐方式
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::SetTextHAlign(UINT nTextHAlign)
{
	m_uTextHAlign=nTextHAlign;
	switch (this->m_uTextHAlign)
	{
	case SL_TA_LEFT:		// 左对齐且不换行
		m_InnerLabel.ModifyStyle(SS_CENTER | SS_RIGHT, SS_LEFT | SS_LEFTNOWORDWRAP);
		break;
	case SL_TA_HCENTER:		// 中间对齐且换行
		m_InnerLabel.ModifyStyle(SS_RIGHT | SS_LEFT | SS_LEFTNOWORDWRAP, SS_CENTER);
		break;
	case SL_TA_RIGHT:		// 右对齐且换行
		m_InnerLabel.ModifyStyle(SS_LEFT | SS_CENTER | SS_LEFTNOWORDWRAP, SS_RIGHT);
		break;
	default:
		break;
	}
	m_InnerLabel.Invalidate();
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:GetTextHAlign
* 函数介绍:返回当前水平对齐方式
* 输入参数:无
* 输出参数:无
* 返回值  :当前水平对齐方式
*/
UINT CScrollLabel::GetTextHAlign() const
{
	return this->m_uTextHAlign;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:SetTextVAlign
* 函数介绍:设定垂直对齐方式
* 输入参数:
            UINT nTextVAlign, 新垂直对齐方式
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::SetTextVAlign(UINT nTextVAlign)
{
	m_uTextVAlign=nTextVAlign;

	// 将m_InnerLabel移动到(0, x), x的值由垂直对齐方式决定
//	CalculateTextSize();
	CRect rect;
	this->GetClientRect(&rect);
	switch (this->m_uTextVAlign)
	{
	case SL_TA_TOP:
		m_InnerRect.OffsetRect(-m_InnerRect.left, 
			-m_InnerRect.top);
		break;
	case SL_TA_VCENTER:
		m_InnerRect.OffsetRect(-m_InnerRect.left, 
			(rect.Height() - m_InnerRect.Height())/2 - m_InnerRect.top);
		break;
	case SL_TA_BOTTOM:
		m_InnerRect.OffsetRect(-m_InnerRect.left, 
			rect.bottom - m_InnerRect.bottom);
		break;
	default:
		break;
	}
	this->m_bLeft = false;
	m_InnerLabel.MoveWindow(&m_InnerRect);
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:GetTextVAlign
* 函数介绍:返回当前垂直对齐方式
* 输入参数:无
* 输出参数:无
* 返回值  :当前垂直对齐方式
*/
UINT CScrollLabel::GetTextVAlign() const
{
	return this->m_uTextVAlign;
}

////////////////////////////////////////////////////////////////////////
/*
* 函数名称:CalculateTextSize
* 函数介绍:计算m_InnerLabel中的字符串的大小,根据结果修改m_InnerRect的大小,
            但不改变m_InnerRect左上角的位置
* 输入参数:无
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::CalculateTextSize()
{
	CString str;
	m_InnerLabel.GetWindowText(str);
	CDC *pDC = this->GetDC();
	CFont *oldfont = pDC->SelectObject(&this->m_Font);
	CSize size = pDC->GetTextExtent(str);
	pDC->SelectObject(oldfont);
	m_InnerRect.right = m_InnerRect.left + size.cx;
	m_InnerRect.bottom = m_InnerRect.top + size.cy;
}


////////////////////////////////////////////////////////////////////////
/*
* 函数名称:Default
* 函数介绍:将文字的各种属性(除文字外)设置为默认值
* 输入参数:无
* 输出参数:无
* 返回值  :无
*/
void CScrollLabel::Default()
{
	CFont f;
	f.Attach(SL_DEFAULT_FONT);
	this->SetFont(&f);
	f.DeleteObject();
	this->SetBkColor(SL_DEFAULT_BKCOLOR);
	this->SetTextColor(SL_DEFAULT_TEXTCOLOR);
	this->SetStep(SL_DEFAULT_STEP);
	this->SetTick(SL_DEFAULT_TICK);
	this->SetTextHAlign(SL_DEFAULT_TEXTHALIGN);
	this->SetTextVAlign(SL_DEFAULT_TEXTVALIGN);
	this->SetScrollStyle(SL_DEFAULT_SCROLLSTYLE);
}



⌨️ 快捷键说明

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