📄 simplemp3dlg.cpp
字号:
GetFileTitle((LPCTSTR)m_strM3UPath, strFileName.GetBuffer(255), 255);
strFileName.ReleaseBuffer(); // Nesissary!!
if (strFileName!="Default")
this->SetWindowText(strTitle + " - " + strFileName);
if (Open(GetNext()))
Play();
}
//[Position] (窗口的左上角位置坐标、高)
BOOL bIconized/*, bMaximized*/;
int x, y,/* cx,*/ cy;
bIconized = pApp->GetProfileInt("Position", "Iconized", 0);
x = pApp->GetProfileInt("Position", "x", 20);
y = pApp->GetProfileInt("Position", "y", 20);
cy = pApp->GetProfileInt("Position", "cy", 368);
int nWidth=GetSystemMetrics(SM_CXSCREEN);
int nHeight=GetSystemMetrics(SM_CYSCREEN);
if (x<-4 || x>nWidth)
x=20;
if (y<-4 || y>nHeight)
y=20;
if (cy<m_iMinHeight || cy>nHeight)
cy=m_iMinHeight;
MoveWindow(x, y, m_iMinWidth, cy);
CRect WinRect;
this->GetWindowRect(&WinRect);
m_List.SetWindowPos(
this,
0,
0,
WinRect.Width()-this->m_iWidth,
WinRect.Height()-this->m_iHeight,
SWP_NOMOVE | SWP_NOZORDER);
// Close the splash screen
#ifndef _DEBUG
// be careful! if error occur in the OpenM3U()...
::ShowSplash(false);
#endif
if (bIconized)
{
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE);
}
else
{
SendMessage(WM_SYSCOMMAND, SC_RESTORE);
}
//[Options]
m_bElapse=pApp->GetProfileInt("Options", "Elapse", 1);
//[Title]
UINT uTitleStyle=pApp->GetProfileInt("Title", "Style", CScrollLabel::SL_HSCROLLBOTH);
UINT uStep=pApp->GetProfileInt("Title", "Step", 4);
UINT uTick=pApp->GetProfileInt("Title", "Tick", 200);
m_Title.SetScrollStyle(uTitleStyle);
m_Title.SetStep(uStep);
m_Title.SetTick(uTick);
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnTitle
* 函数介绍:响应单击Title的操作
* 输入参数:无
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::OnTitle()
{
// TODO: Add your control notification handler code here
this->m_Title.SetScrollStyle((m_Title.GetScrollStyle()+1) % CScrollLabel::SL_STYLENUM);
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:CtlColor
* 函数介绍:响应WM_CTLCOLOR_REFLECT消息,重画对话框的背景
* 输入参数:CDC* pDC, UINT nCtlColor
* 输出参数:无
* 返回值 :HBRUSH
*/
HBRUSH CSimpleMP3Dlg::CtlColor(CDC* pDC, UINT nCtlColor)
{
// TODO: Return a different brush if the default is not desired
return (HBRUSH)this->m_bkBrush.GetSafeHandle();
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnNcHitTest
* 函数介绍:禁止调整对话框宽度
* 输入参数:CPoint point
* 输出参数:无
* 返回值 :UINT
*/
UINT CSimpleMP3Dlg::OnNcHitTest(CPoint point)
{
// TODO: Add your message handler code here and/or call default
UINT nHitTest = CDialog :: OnNcHitTest (point) ;
switch (nHitTest)
{
case HTLEFT:
case HTRIGHT:
case HTBOTTOMLEFT:
case HTBOTTOMRIGHT:
case HTTOPLEFT:
case HTTOPRIGHT:
nHitTest = HTCLIENT;
break;
default:
break;
}
return nHitTest;
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnListItemPlay
* 函数介绍:响应自定义消息MYWM_LISTITEMPLAY,该消息由m_List在要求播放列表项时发送
* 输入参数:WPARAM wParam(不使用)
LPARAM lParam(不使用)
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::OnListItemPlay(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your command handler code here
int iSelItem;
m_List.GetSelItems(1, &iSelItem);
ASSERT(iSelItem > -1);
if (Open(iSelItem))
Play();
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnListItemDelete
* 函数介绍:响应自定义消息MYWM_LISTITEMDELETE,该消息由m_List在删除列表项前/后发送
* 输入参数:WPARAM wParam, 0-将要删除列表项, 1-已删除列表项
LPARAM lParam(不使用)
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::OnListItemDelete(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your command handler code here
if (!wParam) // 将要删除列表项...
{
int iSelCount=m_List.GetSelCount();
int iSelBeforeCurrent=0;
int i;
ASSERT(iSelCount > 0);
//要删除正在播放的项...
if (m_List.GetSel(m_iOpenedID))
{ m_mcimp3.MCIClose();
m_Play.SetCheck(FALSE);
m_Pause.SetCheck(FALSE);
m_Stop.SetCheck(FALSE);
m_iOpenedID=-1;
}
// 计算删除后正在播放的项的位置...
LPINT rgIndex;
rgIndex = new int[iSelCount];
m_List.GetSelItems(iSelCount, rgIndex);
for (i=0; i<iSelCount; i++)
{
if (*(rgIndex+i)<=m_iOpenedID)
iSelBeforeCurrent++;
}
m_iOpenedID-=iSelBeforeCurrent;
delete rgIndex;
}
else // 已删除列表项...
{
// 更新外观...
CString strTitle=_T("");
// CString strNewTitle=_T("");
CString strWinTitle=_T("");
strWinTitle.LoadString(IDS_TITLE);
if (!m_mcimp3.MCIIsOpened()) //无文件打开...
{
//还原Time, Title, Slider, TrayTooltip
this->SetTime(0);
m_Title.SetWindowText("无");
m_Slider.SetPos(0);
m_pTrayIcon->ModifyTip(strWinTitle);
}
else //有文件打开...
{
//更改Title, TrayTooltip, SelItem
strTitle = m_List.GetTitle(m_iOpenedID) + "(" + m_List.GetLength(m_iOpenedID) + ")";
strWinTitle = strTitle + " - " + strWinTitle;
m_Title.SetWindowText(strTitle);
m_pTrayIcon->ModifyTip(strWinTitle);
m_List.SetHotItem(m_iOpenedID);
}
}
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnListItemInfo
* 函数介绍:响应自定义消息MYWM_LISTITEMINFO,该消息由m_List在查询列表项信息后发送
* 输入参数:WPARAM wParam(不使用)
LPARAM lParam(不使用)
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::OnListItemInfo(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your command handler code here
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnListOpenedItemMove
* 函数介绍:响应自定义消息MYWM_LISTOPENEDITEMMOVE,该消息由m_List在正在播放的列表项被移动后发送
* 输入参数:WPARAM wParam, 正在播放的列表项被移动后的位置
LPARAM lParam(不使用)
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::OnListOpenedItemMove(WPARAM wParam, LPARAM lParam)
{
m_iOpenedID = (UINT)wParam;
m_Title.SetWindowText(m_List.GetTitle((UINT)wParam)+"("+m_List.GetLength((UINT)wParam)+")");
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnGetMinMaxInfo
* 函数介绍:响应消息WM_GETMINMAXINFO,设定窗口的最小尺寸
* 输入参数:无
* 输出参数:MINMAXINFO FAR* lpMMI
* 返回值 :无
*/
void CSimpleMP3Dlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
// TODO: Add your message handler code here and/or call default
if (m_iMinWidth > 0 && m_iMinHeight > 0)
{
lpMMI->ptMinTrackSize.x = m_iMinWidth;
lpMMI->ptMaxTrackSize.x = m_iMinWidth;
lpMMI->ptMinTrackSize.y = m_iMinHeight;
}
CDialog::OnGetMinMaxInfo(lpMMI);
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnLButtonDown
* 函数介绍:响应消息WM_LBUTTONDOWN,实现窗口客户区的拖放
* 输入参数:UINT nFlags, CPoint point
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnLButtonDown(nFlags, point);
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:AddFile
* 函数介绍:完成加入文件功能
* 输入参数:无
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::AddFile()
{
//显示"加入MP3文件"对话框
CString strPath=_T("");
CFileDialog FileDlg(
true, //“打开”窗口
"MP3", //默认扩展名
NULL, //默认文件名
OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT, //窗口风格
"MP3文件(*.mp3)|*.mp3||", //文件类型和扩展名
this); //父窗口
FileDlg.m_ofn.lpstrTitle="加入MP3文件";
if (FileDlg.DoModal()==IDCANCEL)
return;
POSITION pos=FileDlg.GetStartPosition();
do
{ strPath=FileDlg.GetNextPathName(pos);
m_List.AddFile(strPath);
//this->UpdateSongInfo(iItemCount);
}while(pos);
return;
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnDialogPopup
* 函数介绍:对话框弹出菜单处理函数
* 输入参数:无
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::OnDialogPopup()
{
// TODO: Add your command handler code here
switch (GetCurrentMessage()->wParam)
{
// 选项->动态标题...
case IDM_DYNAMICTITLE:
{
CDynamicTitle dlg(m_Title.GetScrollStyle(), this);
int nResponse = dlg.DoModal();
break;
}
// 选项->重复
case IDM_REPEAT:
{
m_Repeat.SetCheck(!m_Repeat.GetCheck());
break;
}
// 选项->循环
case IDM_LOOP:
{
m_Loop.SetCheck(!m_Loop.GetCheck());
break;
}
// 选项->随机
case IDM_RANDOM:
{
m_Random.SetCheck(!m_Random.GetCheck());
break;
}
// 选项->静音
case IDM_MUTE:
{
m_Mute.SetCheck(!m_Mute.GetCheck());
OnMute();
break;
}
// 关于...
case IDM_ABOUTBOX:
{
::ShowAbout();
break;
}
// 图标化/还原
case IDM_ICON:
{
if (this->m_bIconized)
{
SendMessage(WM_SYSCOMMAND, SC_RESTORE);
}
else
{
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE);
}
break;
}
// 退出
case ID_EXIT:
{
this->Exit();
break;
}
default:
break;
}
}
////////////////////////////////////////////////////////////////////////
/*
* 函数名称:OnM3uPopup
* 函数介绍:M3u按扭弹出菜单处理函数
* 输入参数:无
* 输出参数:无
* 返回值 :无
*/
void CSimpleMP3Dlg::OnM3uPopup()
{
// TODO: Add your command handler code here
switch (GetCurrentMessage()->wParam)
{
// 新建M3U列表
case IDM_NEW:
{
this->NewM3U();
break;
}
// 打开M3U列表...
case IDM_OPEN:
{
this->OpenM3U();
break;
}
// 关闭M3U列表
case IDM_CLOSE:
{
this->CloseM3U();
break;
}
// 保存M3U列表
case IDM_SAVE:
{
this->SaveM3U();
break;
}
// M3U列表另存为...
case IDM_SAVEAS:
{
this->SaveM3UAs();
break;
}
// 加入文件...
case IDM_ADDFILE:
{
this->AddFile();
break;
}
// 加入目录...
case IDM_ADDDIR:
{
this->AddDir();
break;
}
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -