文字跑马灯效果
1、oncreate中起一个定时器SetTimer(1,100,NULL);,
2、添加WM_TIMER消息的响应函数:OnTimer(UINT_PTR nIDEvent)
3、为类添加一个int型的成员变量m_nWidth用于控制显示范围
中间开花
:OnTimer(UINT_PTR nIDEvent)中的代码
void CMFCApplication1View::OnTimer(UINT_PTR nIDEvent)//这个nIDEvent对应的是oncreate里的SetTimer(1,100,NULL);的第一个参数
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_nWidth += 3;//按5个像素点增加
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CRect rt;
dc.SetTextColor(RGB(255,0,0));//设置红色
CString str;
str.LoadString(ID_SHOWLOG);//获得自己定义的一个字符串资源
rt.left = 50+ (int)dc.GetTextExtent(str).cx/2- m_nWidth;
rt.top = 100;
rt.right = 50 + (int)dc.GetTextExtent(str).cx / 2+m_nWidth;
rt.bottom = rt.top + tm.tmHeight;
dc.DrawText(str, rt, DT_CENTER);
CSize sz = dc.GetTextExtent(str);
if (m_nWidth -50 >= sz.cx)
{
m_nWidth = 0;
dc.SetTextColor(RGB(0, 255, 0));
dc.TextOut(50,200,str);
dc.TextOut(50, 100, str);
}
CView::OnTimer(nIDEvent);
}
左侧进入
:OnTimer(UINT_PTR nIDEvent)中的代码
void CMFCApplication1View::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_nWidth += 3;//按5个像素点增加
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CRect rt;
rt.left = 50;
rt.top = 200;
rt.right = m_nWidth;
rt.bottom = rt.top + tm.tmHeight;
dc.SetTextColor(RGB(255,0,0));//设置红色
CString str;
str.LoadString(ID_SHOWLOG);
dc.DrawText(str,rt,DT_LEFT);//显示的内容,文字显示范围,左对齐格式
CSize sz = dc.GetTextExtent(str);
if (m_nWidth -50 >= sz.cx)
{
m_nWidth = 0;
dc.SetTextColor(RGB(0, 255, 0));
dc.TextOut(50,200,str);
}
CView::OnTimer(nIDEvent);
}
右侧进入
void CMFCApplication1View::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_nWidth += 3;//按3个像素点增加
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CRect rt;
dc.SetTextColor(RGB(255,0,0));//设置红色
CString str;
str.LoadString(ID_SHOWLOG);
rt.right = 50+ (int)dc.GetTextExtent(str).cx;
rt.top = 150;
rt.left = rt.right - m_nWidth;
rt.bottom = rt.top + tm.tmHeight;
dc.DrawText(str, rt, DT_RIGHT);
CSize sz = dc.GetTextExtent(str);
if (m_nWidth -50 >= sz.cx)
{
m_nWidth = 0;
dc.SetTextColor(RGB(0, 255, 0));
dc.TextOut(50,150,str);
}
CView::OnTimer(nIDEvent);
}