📄 scrolllabel.cpp
字号:
{
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 + -