c++文本跑马灯

 文字跑马灯效果

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);
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值