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