📄 playmp3dlg.cpp
字号:
// PLAYMP3Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "PLAYMP3.h"
#include "PLAYMP3Dlg.h"
//#include "OpenFileDlg.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "lrc.h"
#include "fullpathfile.h"
//#define WM_SUSPEND WM_USER+9
extern CString strPath;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//COpenFileDlg openfile_dlg;
CFullPathFile openfile_dlg;
/////////////////////////////////////////////////////////////////////////////
// CPLAYMP3Dlg dialog
#define WM_SUSPEND WM_USER+9
#define SLIDER_TIMER 100
#define WM_SET_VOL WM_USER+229
static TCHAR gszBaseInstance[256] = _T("ControlPanel\\Volume");
HKEY g_hkVolume = NULL;//
CPLAYMP3Dlg::CPLAYMP3Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CPLAYMP3Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPLAYMP3Dlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
mFilterGraph = NULL;
mSourceFile = "";
mSliderTimer = 0;
b_play_or_pause = true;
str_lrc = L"";
b_yesLrc = false;
mp3Info = false;
b_mp3info = false;
b_btn_round = true;
b_beginPlay = false;//最开始不播放
temp_time = "00:00";
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
CPLAYMP3Dlg::~CPLAYMP3Dlg()
{
mp3DestroyGraph();
}
void CPLAYMP3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPLAYMP3Dlg)
DDX_Control(pDX, IDC_STATE_DIAN, m_StateDian);
DDX_Control(pDX, IDC_VOL_DIAN, m_VolDian);
DDX_Control(pDX, IDC_NAMEING, m_Nameing);
DDX_Control(pDX, IDC_PLAYING, m_Playing);
DDX_Control(pDX, IDC_PLAYTIME, m_PlayTime);
DDX_Control(pDX, IDC_LRCNEW, m_NewLrc);
DDX_Control(pDX, IDC_LIST, m_ListMp3);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPLAYMP3Dlg, CDialog)
//{{AFX_MSG_MAP(CPLAYMP3Dlg)
ON_WM_CTLCOLOR()
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_WM_TIMER()
ON_WM_CLOSE()
ON_MESSAGE(WM_SUSPEND,OnSuspend)
ON_LBN_SELCHANGE(IDC_LIST, OnSelchangeList)
ON_WM_SETFOCUS()
ON_WM_HSCROLL()
ON_BN_CLICKED(IDC_BUTTON1, OnOK)
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPLAYMP3Dlg message handlers
BOOL CPLAYMP3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_StateDian.MoveWindow(150,201,29,20);
::SetWindowPos(this->GetSafeHwnd(), HWND_TOPMOST,0, 0,
480, 272,SWP_SHOWWINDOW);
RegOpenKeyEx(HKEY_CURRENT_USER, gszBaseInstance, 0, 0, &g_hkVolume);
xxx = 0;
bei = 0;
m_ListMp3.MoveWindow(41,56,67,162);//
m_ListMp3.SetItemHeight(NULL ,18);//设LIST列表行间矩
m_ListMp3.ShowWindow(SW_HIDE);
kkk_minute= "";
kkk_second= "";
b_volume = true;
CoInitialize(NULL);
GetVolume();//得到当前声音
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
m_BackScreenBitmap.LoadBitmap(IDB_BKG);
SetToolRectangle();
m_listPick = 0;
BYTE m_Byte[16]={0x33 ,0x26,0xB2 ,0x75, 0x8E ,0x66 ,0xCF, 0x11 ,0xA6 ,0xD9, 0x00, 0xAA ,0x00 ,0x62 ,0xCE, 0x6C};//wma文件头。
char cBuffer[100];
memcpy(cBuffer,m_Byte,sizeof(m_Byte));
strWmaTAG = cBuffer;//得到标准的WMA前字节字符串。
m_Playing.MoveWindow(180,53,220,27);
m_Nameing.MoveWindow(180,80,220,27);
m_PlayTime.MoveWindow(180,126-6,220,14);
m_NewLrc.MoveWindow(180,150-4,225,35);
return TRUE; // return TRUE unless you set the focus to a control
}
void CPLAYMP3Dlg::DrawInterface(CDC &dc)
{
CDC memDC ;
memDC.CreateCompatibleDC ( &dc ) ;
CBitmap* pBitmap ; //load all bitmap
CBitmap* pOldBitmap ; //save old bitmap temp
/////////////////////////////////////////////////
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_UP_W) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[0].TopLeft().x, m_rect[0].TopLeft().y, 158, 158, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
//////////////////////////////////////////////
//.............................................................
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_DOWN_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[1].TopLeft().x, m_rect[1].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
//...............................................................
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_ADD_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[2].TopLeft().x, m_rect[2].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
//................................................................
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_SUB_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[3].TopLeft().x, m_rect[3].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
//................................................................
//分配bitmap对象内存
pBitmap = new CBitmap ;
if (!b_play_or_pause)
{
pBitmap ->LoadBitmap ( IDB_SPAUSE_B ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
//将图片COPY到指定的像素位置
dc.BitBlt ( m_rect[4].TopLeft().x, m_rect[4].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
}
else
{
pBitmap ->LoadBitmap ( IDB_PLAYMP3_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
//将图片COPY到指定的像素位置
dc.BitBlt ( m_rect[4].TopLeft().x, m_rect[4].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
}
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
//................................................................
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_STOP_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[5].TopLeft().x, m_rect[5].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
//释放bitmap对象内存
delete pBitmap ;
///////////////////////////////////////
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_LEFT_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[6].TopLeft().x, m_rect[6].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
////////////////////////
//////////////////////
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_RIGHT_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[7].TopLeft().x, m_rect[7].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
/////////////////////////////////////////////////
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_ROUND_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[8].TopLeft().x, m_rect[8].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
/////////////////////
//////////////////////
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_CLOSE_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[9].TopLeft().x, m_rect[9].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
delete pBitmap ;
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_CANCEL_W ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[10].TopLeft().x, m_rect[10].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
//释放bitmap对象内存
delete pBitmap ;
//分配bitmap对象内存
pBitmap = new CBitmap ;
pBitmap ->LoadBitmap ( IDB_volume ) ;
pOldBitmap = memDC.SelectObject ( pBitmap ) ;
dc.BitBlt ( m_rect[11].TopLeft().x, m_rect[11].TopLeft().y, 111, 111, &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
//释放bitmap对象内存
delete pBitmap ;
memDC.DeleteDC () ;
}
HBRUSH CPLAYMP3Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor == CTLCOLOR_LISTBOX)
{
// pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
pDC->SetBkColor(RGB(0,0,0));
m_brMine = ::CreateSolidBrush(RGB(0,0,0));
return m_brMine;
}
if(nCtlColor == CTLCOLOR_EDIT)
{
// pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(250,200,150));
pDC->SetBkColor(RGB(99,99,99));
m_brMine = ::CreateSolidBrush(RGB(99,99,99));
return m_brMine;
}
if(nCtlColor == CTLCOLOR_STATIC )
{
// pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,255));
pDC->SetBkColor(RGB(99,99,99));
m_brMine = ::CreateSolidBrush(RGB(99,99,99));
return m_brMine;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CPLAYMP3Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CPLAYMP3Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
for ( int i = 0 ; i < 12 ; i ++ )
{
if ( m_rect[i].PtInRect (point) )
{
CDC* pDC = GetDC () ;
CDC memDC ;
memDC.CreateCompatibleDC ( pDC ) ;
CBitmap bmp1 ;
switch ( i )
{
case 0:
{
bmp1.LoadBitmap ( IDB_UP_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 1:
{
bmp1.LoadBitmap ( IDB_DOWN_B) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 2:
{
bmp1.LoadBitmap ( IDB_ADD_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 3:
{
bmp1.LoadBitmap ( IDB_SUB_B) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 4:
break ;
case 5:
{
bmp1.LoadBitmap ( IDB_STOP_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 6:
{
bmp1.LoadBitmap ( IDB_LEFT_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 7:
{
bmp1.LoadBitmap ( IDB_RIGHT_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 8:
{
bmp1.LoadBitmap ( IDB_ROUND_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 9:
{
bmp1.LoadBitmap ( IDB_CLOSE_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 10:
{
bmp1.LoadBitmap ( IDB_CANCEL_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
}
memDC.DeleteDC () ;
ReleaseDC ( pDC ) ;
}
}
}
void CPLAYMP3Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if(b_beginPlay)//开始播放后才可能按进度条。
if (point.x > 151 && point.x < 270 && point.y > 200 &&point.y < 220)
{
double duration = 1.;
mFilterGraph->GetDuration(&duration);
if (point.x < 151+15)
{
double pos = duration * (point.x - 151) / 101; //-15,是为了,到按纽中间
mFilterGraph->SetCurrentPosition(pos);
}
else
{
double pos = duration * (point.x - 151 - 15) / 101; //-15,是为了,到按纽中间
mFilterGraph->SetCurrentPosition(pos);
}
}
CopyBMP(IDB_UP_W,0);
CopyBMP(IDB_DOWN_W,1);
CopyBMP(IDB_ADD_W,2);
CopyBMP(IDB_SUB_W,3);
// CopyBMP(IDB_PLAYMP3_B,4);
CopyBMP(IDB_STOP_W,5);
CopyBMP(IDB_LEFT_W,6);
CopyBMP(IDB_RIGHT_W,7);
CopyBMP(IDB_ROUND_W,8);
CopyBMP(IDB_CLOSE_W,9);
CopyBMP(IDB_CANCEL_W,10);
for ( int i = 0 ; i < 12 ; i ++ )
{
if ( m_rect[i].PtInRect (point) )
{
switch (i)
{
case 0:
Btn_Up();
break ;
case 1:
Btn_Down();
break;
case 2:
Btn_Add();
break ;
case 3:
Btn_Sub();
break ;
case 4:
Btn_Play();
break ;
case 5:
Btn_Stop();
break ;
case 6:
Btn_Left();
break ;
case 7:
Btn_Right();
break ;
case 8:
Btn_Round();
break ;
case 9:
Btn_Close();
break ;
case 10:
Btn_Cancel();
break ;
case 11:
Btn_NoVolume();
break;
}
}
}
}
void CPLAYMP3Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
DrawInterface(dc);
if (b_mp3info &&(m_ListMp3.GetCount() > 0))
{
//设字体大小
CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = 18;
lf.lfWeight = FW_BOLD;//粗体
// lf.lfItalic = TRUE;//斜体
dc.SetTextColor(RGB(255,255,255));
lstrcpy(lf.lfFaceName, _T("Arial"));
VERIFY(font.CreateFontIndirect(&lf));
CFont* def_font = dc.SelectObject(&font);
CString _str_temp_stater = "";
dc.SetBkMode(TRANSPARENT);//透明
_name1 = _name2 = "";
_name1.Format(L"正在播放: %s",mp3Title);
_name2.Format(L"演唱: %s",mp3Artist);
//显示歌曲信息时,如果长度大于,20时。左对齐。反。之中间对齐
if (GetCStringLen(_name1) > 23)
{
// m_Playing.SetMargins()
m_Playing.SetWindowText(_name1);
//dc.DrawText(_name1,CRect(103,53,291,70),ETO_CLIPPED| DT_LEFT);
}
else
m_Playing.SetWindowText(_name1);
//dc.DrawText(_name1,CRect(103,53,291,70),ETO_CLIPPED| DT_CENTER);
if (GetCStringLen(_name2) > 23)
{
m_Nameing.SetWindowText(_name2);
//dc.DrawText(_name2,CRect(102,77,294,96),ETO_CLIPPED| DT_LEFT);
}
else
m_Nameing.SetWindowText(_name2);
//dc.DrawText(_name2,CRect(102,77,294,96),ETO_CLIPPED| DT_CENTER);
//显示。状态情况
dc.SetTextColor(RGB(255,255,255));
}
}
BOOL CPLAYMP3Dlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
BITMAP bmpInfo;
m_BackScreenBitmap.GetBitmap(&bmpInfo);
// Create an in-memory DC compatible with the
// display DC we're using to paint
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);
// Select the bitmap into the in-memory DC
CBitmap* pOldBitmap = dcMemory.SelectObject(&m_BackScreenBitmap);
// Find a centerpoint for the bitmap in the client area
CRect rect;
GetClientRect(&rect);
// Copy the bits from the in-memory DC into the on-
// screen DC to actually do the painting. Use the centerpoint
// we computed for the target offset.
pDC->BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory,
0, 0, SRCCOPY);
dcMemory.SelectObject(pOldBitmap);
return TRUE;
}
void CPLAYMP3Dlg::CopyBMP(int m_map, int i)
{
CDC* pDC = GetDC () ;
CDC memDC ;
memDC.CreateCompatibleDC ( pDC ) ;
CBitmap bmp,bmp1 ;
CBitmap* pOldBitmap ;
bmp1.LoadBitmap ( m_map) ;
pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
memDC.DeleteDC () ;
ReleaseDC ( pDC ) ;
}
void CPLAYMP3Dlg::SetToolRectangle()
{
m_rect[0].SetRect(41,26,41+68,26+26);//up
m_rect[1].SetRect(41,218,41+68,218+27);//down
m_rect[2].SetRect(277,225,277+32,225+32);//+
m_rect[3].SetRect(312,225,312+32,225+32);//-
m_rect[4].SetRect(139,225,139+27,225+27);//spause play
m_rect[5].SetRect(173,225,173+27,225+27);//stop
m_rect[6].SetRect(207,225,207+27,225+27);//left
m_rect[7].SetRect(244,225,244+27,225+27);//right
m_rect[8].SetRect(382,224,382+27,224+27); //round
m_rect[9].SetRect(388,25,388+21,25+20);//close
m_rect[10].SetRect(436,221,436+33,221+33);//cancel
m_rect[11].SetRect(290,201,290+21,201+20);//vol
}
void CPLAYMP3Dlg::Btn_Up()
{
if (bei ==0 ) return;
bei --;
int n_height = bei * 5;
m_ListMp3.SetTopIndex(n_height);
}
void CPLAYMP3Dlg::Btn_Down()
{
int yu;
int lllll = m_ListMp3.GetCount() ;
yu = (m_ListMp3.GetCount()/5) * 5 + 1;
if (bei == (m_ListMp3.GetCount()/5))
{
return;
}
int n_height = 0;
n_height = (++bei) * 5 ;
if (n_height > m_ListMp3.GetCount() )
{
m_ListMp3.SetTopIndex(yu);
}
else
m_ListMp3.SetTopIndex(n_height);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -