简单歌词控件2

void CLrc::Paint(HDC hdc,CRect rtRect)
{
	CRect rect;
  	if (rect.IntersectRect(rtRect,m_rRect))
	{
		CRect drawRect;
        
		SetBkMode(hdc,TRANSPARENT);
		SetBkColor(hdc,RGB(0,0,0));
		SetTextColor(hdc,RGB(255,0,255));
		SelectObject(hdc,m_hFont);
		for (int i=m_TopIndex;i<lrc_vector.size();i++)
		{
		   if (i - m_TopIndex <= m_rRect.Height()/m_LrcHeight) //显示相应的行数
		   {
			   	if (i == m_CurIndex)
				{
				   SetTextColor(hdc,RGB(255,255,0));
				}
				drawRect.left = m_rRect.left-rtRect.left,
				drawRect.top = m_rRect.top-rtRect.top+(i-m_TopIndex)*m_LrcHeight;
				drawRect.right = drawRect.left+m_rRect.Width();
				drawRect.bottom = drawRect.top+m_LrcHeight;

				rect = CRect(0,0,0,0); 
				if (rect.IntersectRect(drawRect,CRect(m_rRect.left-rtRect.left,m_rRect.top-rtRect.top,m_rRect.Width(),m_rRect.Height())))
				{
					::DrawText(hdc,lrc_vector[i].szGeci,lrc_vector[i].szGeci.GetLength(),drawRect,DT_CENTER|DT_VCENTER);
				}
				
				SetTextColor(hdc,RGB(255,0,255));	
		   }
		}
	}
}
void CLrc::UpdateLrc(UINT time)
{
	for (int i=0;i<lrc_vector.size()-1;i++) //根据当前歌曲的时间找到相应的歌词
	{
		if ((lrc_vector[i].startTime >= time)&&(time < lrc_vector[i+1].startTime) && !lrc_vector[i].szGeci.IsEmpty())
		{
			m_CurIndex = i-1;
                           if(m_CurIndex <0)
                           m_CurIndex =0;
			break;
		}
		else if (i==lrc_vector.size()-2) //歌词时间比歌曲短,直接到最后一行
		{
			m_CurIndex = lrc_vector.size()-1;
		}
	}
	if ((m_CurIndex - m_TopIndex < m_rRect.Width()/(m_LrcHeight*2))&&(m_CurIndex >= m_TopIndex)) //
	{
	}
	else if (m_CurIndex - m_TopIndex > m_rRect.Width()/(m_LrcHeight*2))
	{
		m_TopIndex = m_CurIndex - m_rRect.Width()/(m_LrcHeight*2);
	}
	else if (m_CurIndex > m_TopIndex)
	{
		m_TopIndex++;
	}
	else
	{
		m_TopIndex = m_CurIndex;
	}
	
	InvalidateRect(m_hWnd,m_rRect/*CRect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN))*/,false);
}
void CLrc::GetLrc(vector<LrcInfo> &lrcvector)
{
	for (int i=0;i<lrc_vector.size();i++)
	{
		lrcvector.push_back(lrc_vector[i]);
	}
}

////////////////////////////////////////

	CRect rt;
	GetClipBox(dc.m_hDC,rt);
	if (m_Bitmap == NULL)
	{
		m_Bitmap = ::SHLoadDIBitmap(L"\\Nandflash\\bk1.bmp");
	}
	// TODO: Add your message handler code here
	CRect rtReDraw;
	GetClipBox(dc.m_hDC, rtReDraw);

	HBITMAP Membmp = CreateCompatibleBitmap(dc.m_hDC, rtReDraw.Width(), rtReDraw.Height() );
	HDC		Memdc  = CreateCompatibleDC(dc.m_hDC);
	HDC     bmpdc  = CreateCompatibleDC(dc.m_hDC);
	::SelectObject(Memdc, Membmp);
	::SelectObject(bmpdc, m_Bitmap); //加载背景图

	::BitBlt(Memdc, 0, 0, rtReDraw.Width(), rtReDraw.Height(), 
		bmpdc, rtReDraw.left, rtReDraw.top, SRCCOPY);

	lrc.Paint(Memdc,rt);

	::BitBlt(dc.m_hDC, rtReDraw.left, rtReDraw.top, rtReDraw.Width(), rtReDraw.Height(), 
		Memdc, 0, 0, SRCCOPY);

	::DeleteDC(Memdc);
	::DeleteDC(bmpdc);
	::DeleteObject(Membmp);

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值