一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

mp3顯示歌詞控件

 啟蒙彩魂 2011-01-20
顯示歌詞的控件 歌詞文件是.lrc格式的 請下載我在CSDN里上傳的酷狗音樂源碼幫你更好理解
一。條用時請先在主程序里初始化GDI+:
1.在stdafx.h里添加
     //----------------------------------------------------
       #include "gdiplus.h" ////請修改為你的頭文件路徑
       using namespace Gdiplus;
      #pragma comment(lib, "gdiplus.lib") ////請修改為你的.lib文件路徑
   //-----------------------------------------------------------
2.在××App里的初始化函數(shù):InitInstance()里添加
   初始化時
  //---------------------------------------
   GdiplusStartupInput gdiplusStartupInput;
   ULONG_PTR gdiplusToken;
   GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
 //--------------------------------------
 關(guān)閉時
 //---------------------------------------
   GdiplusShutdown(gdiplusToken);
 //-------------------------------------
二。初始化控件
   geciwenj=new CGecikongjian;
  geciwenj->Create(NULL, _T("歌詞控件"), WS_CHILD,
  CRect(0,0,700,730), GetDesktopWindow(), 124);
  geciwenj->ShowWindow(SW_SHOW);
  geciwenj->OpenGeCiFile(存在在程序里的歌詞文件名/在別處的帶路徑的歌詞文件名);//打開歌詞文件
三。歌詞控件代碼
/*******************************************************************************
    文件名稱 : Gecikongjian.h 頭文件
    作    者 : 楊治忠
    創(chuàng)建時間 : 2010-12-20  15:45:17
    文件描述 : 顯示歌詞控件
    版權(quán)聲明 : Copyright (C) 2010-2012 揚名科技
    修改歷史 : 楊治忠 2010-12-20    1.00    初始版本
*******************************************************************************/
#pragma once
class CGecikongjian : public CWnd
{
 DECLARE_DYNAMIC(CGecikongjian)
public:
 void OpenGeCiFile(CString filename);//打開歌詞文件
protected:
 typedef BOOL (WINAPI* lpfnUpdateLayeredWindow)(HWND hwnd,HDC hdcDst,POINT *pptDst,SIZE *psize,HDC hdcSrc,POINT *pptSrc,COLORREF crKey,BLENDFUNCTION *pblend,DWORD dwFlags);
 lpfnUpdateLayeredWindow UpdateLayeredWindow;//指針函數(shù)類型聲明
 void DrawGeCi(void);//顯示歌詞
 CString texout;//歌詞類容
 double q;//一行歌詞走動占整行的比例1
 double m;//----------------2
 int l;//-------------------3
 CStdioFile file;//文件類對象
 CString a[100];//存儲打開歌詞文件后的每行文字
 int sum;//歌詞文件的行數(shù)
 void GetTimeAndGeci();//獲取每個時間段和時間段對應(yīng)的歌詞
 CString c[100];//每行歌詞
 int b[100];//每行時間
 void TimeAndGeciPaiXu();//時間歌詞排序
 int sum1;//時間的段數(shù)
 void YouHaGeCi();//把歌詞里沒用的符號去掉
 DWORD readlen;
 BLENDFUNCTION m_Blend;//G++
 
public:
 CGecikongjian();
 virtual ~CGecikongjian();
protected:
 DECLARE_MESSAGE_MAP()
public:
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
public:
 afx_msg void OnTimer(UINT_PTR nIDEvent);
public:
};
/*******************************************************************************
    文件名稱 : Gecikongjian.cpp 實現(xiàn)文件
    作    者 : 楊治忠
    創(chuàng)建時間 : 2010-12-20  16:29:56
    文件描述 : QQ號:940446982   VC技術(shù)QQ群:92790715歡迎加入
    版權(quán)聲明 : Copyright (C) 2010-2012 感謝技術(shù)支持 YZM
    修改歷史 : 楊治忠 2010-12-20    1.00    初始版本
*******************************************************************************/
#include "stdafx.h"
#include "MyMp3Play.h"
#include "Gecikongjian.h"
extern int MusicTime;
IMPLEMENT_DYNAMIC(CGecikongjian, CWnd)
CGecikongjian::CGecikongjian()
{
 q      = 0.0;
 m      = 0.0;
 l      = 0;
 texout = "";
}
CGecikongjian::~CGecikongjian()
{
}

BEGIN_MESSAGE_MAP(CGecikongjian, CWnd)
 ON_WM_CREATE()
 ON_WM_TIMER()
END_MESSAGE_MAP()
int CGecikongjian::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 // TODO:  在此添加您專用的創(chuàng)建代碼
 /***************************************************
 /********導(dǎo)出透明函數(shù)    ***************************
 /**************************************************/
 HMODULE hMoudle=::GetModuleHandle(_T("user32.dll"));
 if(hMoudle)
 { 
       #ifndef WS_EX_LAYERED
       #define WS_EX_LAYERED           0x00080000
       #endif
  SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);
  UpdateLayeredWindow=(lpfnUpdateLayeredWindow)GetProcAddress(hMoudle,_T("UpdateLayeredWindow"));
 }
 //GDI+
 //---------------------------------------------------
 m_Blend.BlendOp=0; //theonlyBlendOpdefinedinWindows2000
 m_Blend.BlendFlags=0; //nothingelseisspecial...
 m_Blend.AlphaFormat=1; //...
 m_Blend.SourceConstantAlpha=255;//AC_SRC_ALPHA
 //----------------------------------------------
    SetTimer(0,1000,NULL);//設(shè)置定時器
 return 0;
}
/********************************************************************
函數(shù)名稱  ::DrawGeCi(void)
函數(shù)描述  :顯示歌詞
輸入?yún)?shù)  : void
輸出參數(shù)  : void
備注      : QQ號:940446982   VC技術(shù)QQ群:92790715歡迎加入
*********************************************************************/
void CGecikongjian::DrawGeCi(void)
{
 RECT rct;
 GetWindowRect(&rct);
 HDC hdcTemp=GetDC()->m_hDC;
 HDC m_hdcMemory=CreateCompatibleDC(hdcTemp);
 HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,rct.right - rct.left, rct.bottom - rct.top );
 SelectObject(m_hdcMemory,hBitMap);
 m_Blend.SourceConstantAlpha=60;
 Graphics graphics(m_hdcMemory);
 FontFamily fontFamily(L"宋體");
 Font font(&fontFamily, 45, FontStyleBold, UnitPixel);
 SolidBrush solidBrush(Color(255, 0, 0, 255));
 graphics.SetTextRenderingHint(TextRenderingHintSingleBitPerPixel);
 graphics.DrawString(
  texout.AllocSysString(), (INT)wcslen(texout.AllocSysString()), &font, PointF(10, 10), &solidBrush);
 int b;
 b=(INT)wcslen(texout.AllocSysString())*q;
 SolidBrush solidBrush1(Color(255, 255, 0,0));
 graphics.SetTextRenderingHint(TextRenderingHintSingleBitPerPixel);
 graphics.DrawString(
  texout.AllocSysString(),b , &font, PointF(10, 10), &solidBrush1);

 HDC hdcScreen=::GetDC (m_hWnd);
 
 POINT ptWinPos={rct.left,rct.top};
 POINT ptSrc={0,0};
 SIZE sizeWindow={rct.right - rct.left, rct.bottom - rct.top};
 BOOL bRet=FALSE;
 
 bRet= UpdateLayeredWindow( m_hWnd,hdcScreen,&ptWinPos,
  &sizeWindow,m_hdcMemory,&ptSrc,0,&m_Blend,2);
 graphics.ReleaseHDC(m_hdcMemory);
 ::ReleaseDC(m_hWnd,hdcScreen);
 hdcScreen=NULL;
 ::ReleaseDC(m_hWnd,hdcTemp);
 hdcTemp=NULL;
 DeleteObject(hBitMap);
 DeleteDC(m_hdcMemory);
 m_hdcMemory=NULL;
}
/********************************************************************
函數(shù)名稱  : OpenGeCiFile(CString filename)
函數(shù)描述  :打開歌詞文件
備注      : QQ號:940446982   VC技術(shù)QQ群:92790715歡迎加入
*********************************************************************/
void CGecikongjian::OpenGeCiFile(CString filename)
{
 try
 {
 
   file.Open(filename,CFile::modeRead);
 
 }catch(CFileException* e)
 {
  TCHAR szBuf[256];
  e->GetErrorMessage(szBuf,256,NULL);
  MessageBox(szBuf,_T("錯誤"));
  e->Delete();
 }
  CString readstring;
  if(file)
  {
   if (readlen==file.GetLength())
    return;
   int i = 0;
   while(file.ReadString(readstring))
   {
    a[i]=readstring;
    i++;
   }
   file.Close();
   sum=i;
  }
  GetTimeAndGeci();
  TimeAndGeciPaiXu();
  YouHaGeCi();
}
/********************************************************************
函數(shù)名稱  : GetTimeAndGeci()
函數(shù)描述  : 獲取時間和時間對應(yīng)的歌詞
備注      : QQ號:940446982   VC技術(shù)QQ群:92790715歡迎加入
*********************************************************************/
void CGecikongjian::GetTimeAndGeci()
{
 int k=0;
 for(int j=0;j<sum;j++)
 {
  CString strGet;
  int nMinute;
  int nSecond;
  TCHAR szMinute[10];
  TCHAR szSecond[10];
  lstrcpy(szMinute,"");
  lstrcpy(szSecond,"");
  int point=0;
  point= a[j].Find(":",0);
  if(point==-1)
  {
   b[k]=0;
   c[k]=a[j];
   k++;
  }
  else
  {
   //分
   strGet=a[j].Left(point);
   strGet=strGet.Right(2);
   lstrcpy(szMinute,strGet);
   nMinute=atoi(szMinute);
   //秒
   strGet=a[j].Right(a[j].GetLength()-point-1);
   if(strGet.GetLength()==1)
    strGet=strGet.Left(1);
   else if(strGet.GetLength()>=2)
    strGet=strGet.Left(2);
   lstrcpy(szSecond,strGet);
   nSecond=atoi(szSecond);
   b[k]=nMinute*60+nSecond;
   c[k]=a[j];
   k++;
   point= a[j].Find(":",10);
   if (point!=-1)
   {
    strGet=a[j].Left(point);
    strGet=strGet.Right(2);
    lstrcpy(szMinute,strGet);
    nMinute=atoi(szMinute);
    //秒
    strGet=a[j].Right(a[j].GetLength()-point-1);
    if(strGet.GetLength()==1)
     strGet=strGet.Left(1);
    else if(strGet.GetLength()>=2)
     strGet=strGet.Left(2);
    lstrcpy(szSecond,strGet);
    nSecond=atoi(szSecond);
    b[k]=nMinute*60+nSecond;
    c[k]=a[j];
    k++;
   }

  }
 }
 sum1=k;
}
/********************************************************************
函數(shù)名稱  : TimeAndGeciPaiXu()
函數(shù)描述  : 對時間和時間對應(yīng)的歌詞排序
備注      : QQ號:940446982   VC技術(shù)QQ群:92790715歡迎加入
*********************************************************************/
void CGecikongjian::TimeAndGeciPaiXu()
{
 for (int j=0;j<sum1;j++)
  for(int i=0;i<sum1-j;i++)
   if (b[i]>b[i+1])
   {
    int t;
    CString s;
    t=b[i];
    s=c[i];
    b[i]=b[i+1];
    c[i]=c[i+1];
    b[i+1]=t;
    c[i+1]=s;
   }
}
/********************************************************************
函數(shù)名稱  : YouHaGeCi()
函數(shù)描述  : 把歌詞里沒用的符號去掉
備注      : QQ號:940446982   VC技術(shù)QQ群:92790715歡迎加入
*********************************************************************/
void CGecikongjian::YouHaGeCi()
{
 for (int i=0;i<100;i++)
 {
  if (b[i]!=0)
  {
   DWORD o=0;
   DWORD j=0;
   DWORD h=0;
   j=c[i].GetLength();//獲取該行長度
   o=c[i].Find("]",0);//找到"]"的位置
   h=j-o-1;
   c[i]=c[i].Right(h);//去掉"]"前的類容
   //重復(fù)一遍,因為有的行有兩個時間
   j=c[i].GetLength();//獲取該行長度
   o=c[i].Find("]",0);//找到"]"的位置
   h=j-o-1;
   c[i]=c[i].Right(h);//去掉"]"前的類容
  }
 }
}
void CGecikongjian::OnTimer(UINT_PTR nIDEvent)
{
 // TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值
 if (MusicTime<1)
 {
  texout=c[0]+c[1];
 }
 for (int i=0;i<100;i++)
 {
  if(b[i]==(MusicTime+1))
  {
   texout=c[i];
   l=b[i+1]-b[i];
            if (l<0)
            {
    l=b[i]-b[i-1];
            }
   m=1.0/l;
   q=0.0;
  }
 }
 q+=m;
 if (q>1)
 {
  q=m;
 }
    DrawGeCi();
 Invalidate();
 CWnd::OnTimer(nIDEvent);
}

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩三级黄色大片免费观看| 欧美日本亚欧在线观看| 亚洲第一香蕉视频在线| 俄罗斯胖女人性生活视频| 黄色片一区二区三区高清| 欧美一区二区三区在线播放| 日韩一区二区三区嘿嘿| 91欧美亚洲精品在线观看| 日韩精品区欧美在线一区| 国产亚洲精品一二三区| 天海翼高清二区三区在线| 国产不卡在线免费观看视频| 肥白女人日韩中文视频| 欧美区一区二区在线观看| 午夜亚洲少妇福利诱惑| 亚洲一区二区三区三州| 欧美日韩精品久久第一页| 91久久精品中文内射| 欧美成人高清在线播放| 老司机精品国产在线视频| 日韩不卡一区二区视频| 久久精品亚洲情色欧美| 日本一区二区三区久久娇喘| 欧美一本在线免费观看| 很黄很污在线免费观看| 精品国产亚洲av成人一区| 欧美日韩国产二三四区| 欧美日本道一区二区三区| 国产精品二区三区免费播放心| 国产精品涩涩成人一区二区三区| 国产又粗又黄又爽又硬的| 午夜久久久精品国产精品| 中文字幕一区二区三区中文| 国产精品日韩精品最新| 久久久精品区二区三区| 国产午夜精品亚洲精品国产| 欧美精品亚洲精品一区| 日韩欧美国产精品自拍| 国产精品福利精品福利| 国产精品日韩欧美一区二区| 大伊香蕉一区二区三区|