📄 mediaplayervcdlg.cpp
字号:
m_nTimer = SetTimer(1, 100, 0);
axMediaPlayer1.put_CurrentPosition(position1);
axMediaPlayer1.Play();
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
KillTimer(m_nTimer);
MessageBox("可能是选择了无效的声音文件","杨竣凯",MB_OK|MB_ICONQUESTION);
enableAllButtonsExceptOpenFileButton(false);
}
}
void CMediaPlayerVCDlg::OnTimer(UINT nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(nIDEvent==1)
{
if(axMediaPlayer1.get_CurrentPosition()>=position2)
{
if(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck()==1)
{
axMediaPlayer1.put_CurrentPosition(position1);
return;
}
KillTimer(m_nTimer);
axMediaPlayer1.Stop();
}
}
else
{
if(listBox1.GetCurSel()==maxIndex) return;
if(axMediaPlayer1.get_CurrentPosition()>=positions[listBox1.GetCurSel()+1])
{
if(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck()==1)
{
axMediaPlayer1.put_CurrentPosition(positions[listBox1.GetCurSel()]);
return;
}
KillTimer(2);
axMediaPlayer1.Stop();
}
}
CDialog::OnTimer(nIDEvent);
}
//单击“重放”按钮,引发重放动作
void CMediaPlayerVCDlg::OnBnClickedRepeat2()
{
// TODO: 在此添加控件通知处理程序代码
if(listBox1.GetCurSel()==-1) return;
axMediaPlayer1.put_CurrentPosition(positions[listBox1.GetCurSel()]);
KillTimer(1);
SetTimer(2, 100, 0);
axMediaPlayer1.Play();
}
//删除被选中的暂停点
void CMediaPlayerVCDlg::OnBnClickedDelete()
{
// TODO: 在此添加控件通知处理程序代码
int i=listBox1.GetCurSel();
if(i==-1) return;
while(i<maxIndex)//用这个循环将数组元素向前移动一个位置
{
positions[i]=positions[i+1];
i++;
}
maxIndex--;
i=listBox1.GetCurSel();
listBox1.DeleteString(i);
if(i>maxIndex)
{
if(i==0) return;
listBox1.SetCurSel(maxIndex);
}
else
listBox1.SetCurSel(i);
alreadyModified=true;
}
//减小被选中的暂停点的值
void CMediaPlayerVCDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
int i2=listBox1.GetCurSel();
if(i2<0) return;
positions[i2]=positions[i2]-incrementValue2;
char str[80];
sprintf(str,"%f",positions[i2]);
listBox1.DeleteString(i2);
listBox1.InsertString(i2,str);
listBox1.SetCurSel(i2);
alreadyModified=true;
}
//增加被选中的暂停点的值
void CMediaPlayerVCDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
int i2=listBox1.GetCurSel();
if(i2<0) return;
positions[i2]=positions[i2]+incrementValue2;
char str[80];
sprintf(str,"%f",positions[i2]);
listBox1.DeleteString(i2);
listBox1.InsertString(i2,str);
listBox1.SetCurSel(i2);
alreadyModified=true;
}
//播放下一句的按钮
void CMediaPlayerVCDlg::OnBnClickedNext()
{
// TODO: 在此添加控件通知处理程序代码
int i3=listBox1.GetCurSel();
if(i3==maxIndex) return;
listBox1.SetCurSel(i3+1);
axMediaPlayer1.put_CurrentPosition(positions[i3+1]);
SetTimer(2, 100, 0);
axMediaPlayer1.Play();
}
void CMediaPlayerVCDlg::OnLbnDblclkList1()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedRepeat2();
}
//position1减0.5
void CMediaPlayerVCDlg::OnBnClickedSubtract1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
position1=position1-incrementValue1;
m_textBox2=position1;
UpdateData(false);
}
//position1加0.5
void CMediaPlayerVCDlg::OnBnClickedPlus1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
if((position1+incrementValue1)>position2)
{
position2=position2+incrementValue1;
m_textBox3=position2;
}
position1=position1+incrementValue1;
m_textBox2=position1;
UpdateData(false);
}
//position2减0.5
void CMediaPlayerVCDlg::OnBnClickedSubtract2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
if((position2-incrementValue1)<position1)
{
position1=position1-incrementValue1;
m_textBox2=position1;
}
position2=position2-incrementValue1;
m_textBox3=position2;
UpdateData(false);
}
//position2加0.5
void CMediaPlayerVCDlg::OnBnClickedPlus2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
position2=position2+incrementValue1;
m_textBox3=position2;
UpdateData(false);
}
void CMediaPlayerVCDlg::OnEnKillfocusEdit2()
{
// TODO: 在此添加控件通知处理程序代码
//__try
{
UpdateData(true);
position1=m_textBox2;
}
//__except(EXCEPTION_EXECUTE_HANDLER)
{
//由于已经给textBox2控件添加了一个double类型的变量,
//所以系统已经自动添加了输入有效性检验了
//所以,在这里不能拦截异常,而是应该传递给系统
}
}
void CMediaPlayerVCDlg::OnEnKillfocusEdit3()
{
// TODO: 在此添加控件通知处理程序代码
//__try
{
UpdateData(true);
position2=m_textBox3;
}
//__except(EXCEPTION_EXECUTE_HANDLER)
{
//由于已经给textBox2控件添加了一个double类型的变量,
//所以系统已经自动添加了输入有效性检验了
//所以,在这里不能拦截异常,而是应该传递给系统
}
}
//设置复读的开始点
void CMediaPlayerVCDlg::OnBnClickedSetstart()
{
// TODO: 在此添加控件通知处理程序代码
__try
{
position1=axMediaPlayer1.get_CurrentPosition();
m_textBox2=position1;
m_textBox3=position2;
UpdateData(false);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
//MessageBox("可能是选择了无效的声音文件","杨竣凯",MB_OK);
//enableAllButtonsExceptOpenFileButton(false);
}
}
//设置复读的结束点
void CMediaPlayerVCDlg::OnBnClickedSetend()
{
// TODO: 在此添加控件通知处理程序代码
__try
{
position2=axMediaPlayer1.get_CurrentPosition();
m_textBox2=position1;
m_textBox3=position2;
UpdateData(false);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
//MessageBox("可能是选择了无效的声音文件","杨竣凯",MB_OK);
//enableAllButtonsExceptOpenFileButton(false);
}
}
long CMediaPlayerVCDlg::ExpFltr(PEXCEPTION_RECORD pER)
{
char szBuf[300], *p;
DWORD dwExceptionCode = pER->ExceptionCode;
sprintf(szBuf, "Code = %x, Address = %p",
dwExceptionCode, pER->ExceptionAddress);
// Find the end of the string.
p = strchr(szBuf, 0);
// I used a switch statement in case Microsoft adds
// information for other exception codes in the future.
switch (dwExceptionCode) {
case EXCEPTION_ACCESS_VIOLATION:
sprintf(p, "Attempt to %s data at address %p",
pER->ExceptionInformation[0] ? "write" : "read",
pER->ExceptionInformation[1]);
break;
default:
break;
}
MessageBox(szBuf, "Exception", MB_OK | MB_ICONEXCLAMATION);
//return(EXCEPTION_CONTINUE_SEARCH);
return(EXCEPTION_EXECUTE_HANDLER);
}
bool CMediaPlayerVCDlg::LoadStateFromIniFile(void)
{
CStdioFile fileIni;
CStdioFile file1;
char currentDir[250];
GetModuleFileName(theApp.m_hInstance,currentDir,250);
currentDir[lstrlen(currentDir)-3]=0;
lstrcat(currentDir,"ini");
//下面的这一段代码,是从MediaPlayerVC.ini文件中读取上次播放的信息,使
//播放器恢复上次的状态。
bool bReaddingFileOK=true;
if(!fileIni.Open(currentDir,CStdioFile::modeRead))
{
//打开ini文件失败,说明,ini文件并不存在,所以,就不用从ini文件中读取信息了,返回false
return false;
}
if(fileIni.ReadString(currentDir,80))
position1=atof(currentDir);//把字符串转化成double类型的数据
else
bReaddingFileOK=false;
if(bReaddingFileOK && fileIni.ReadString(currentDir,80))
position2=atof(currentDir);//把字符串转化成double类型的数据
else
bReaddingFileOK=false;
if(bReaddingFileOK && fileIni.ReadString(currentDir,80))
incrementValue1=atof(currentDir);//把字符串转化成double类型的数据
else
bReaddingFileOK=false;
if(bReaddingFileOK && fileIni.ReadString(currentDir,80))
incrementValue2=atof(currentDir);//把字符串转化成double类型的数据
else
bReaddingFileOK=false;
if(bReaddingFileOK && fileIni.ReadString(currentDir,80))
shiftValue=atof(currentDir);//把字符串转化成double类型的数据
else
bReaddingFileOK=false;
if(bReaddingFileOK && fileIni.ReadString(currentDir,250))
//读取上一次播放的文件完整路径,到currentDir目录中
textBox1Text=currentDir;
else
bReaddingFileOK=false;
fileIni.Close();
//从MediaPlayerVC.ini文件中读取上次播放的信息 结束
//如果从ini文件中读取信息成功,则
if(bReaddingFileOK)
{
//这一段代码是将从ini文件中读取的信息,在对话框中的各个控件中,显示出来
textBox1.SetWindowText(currentDir);
textBox1Text=currentDir;//保存声音文件的完整路径
axMediaPlayer1.put_FileName(currentDir);
axMediaPlayer1.Stop();
m_textBox2=position1;
m_textBox3=position2;
enableAllButtonsExceptOpenFileButton(true);
UpdateData(false);
//下面的代码是加载暂停点文件
enableAllButtonsExceptOpenFileButton(true);
listBox1.ResetContent();//清空列表框
maxIndex=-1;
lstrcpyn(textFileName1,currentDir,lstrlen(currentDir)-2);
lstrcat(textFileName1,"txt");
//MessageBox(textFileName1,"",1);//调试用的
//如果打开暂停点文件成功,则
if(file1.Open(textFileName1,CStdioFile::modeRead))
{
//读取暂停点文件中的内容,将内容添加到数组和ListBox控件中
while(file1.ReadString(currentDir,80))
{
listBox1.AddString(currentDir);
maxIndex++;
positions[maxIndex]=atof(currentDir);//把字符串转化成double类型的数据
}
if(maxIndex>-1) listBox1.SetCurSel(0);
}
file1.Close();
alreadyModified=false;
return true;
}
return false;
}
bool CMediaPlayerVCDlg::SaveStateToIniFile(void)
{
CStdioFile file1;
char currentDir[250];
GetModuleFileName(theApp.m_hInstance,currentDir,250);
//lstrcpyn(textFileName1,currentDir,lstrlen(currentDir)-2);
currentDir[lstrlen(currentDir)-3]=0;
lstrcat(currentDir,"ini");
//CFile::modeCreate Directs the constructor to create a new file. If the file exists already, it is truncated to 0 length.
//必须要使用CFile::modeCreate这种OpenFlag来打开文件,因为需要去掉旧的文件内容
file1.Open(currentDir,CStdioFile::modeCreate|CStdioFile::modeWrite);
//将播放器的当前状态信息保存到ini文件中
char buff[80];
UpdateData(true);
sprintf(buff,"%f\n",position1);
file1.WriteString((LPCTSTR)buff);
sprintf(buff,"%f\n",position2);
file1.WriteString((LPCTSTR)buff);
sprintf(buff,"%f\n",incrementValue1);
file1.WriteString((LPCTSTR)buff);
sprintf(buff,"%f\n",incrementValue2);
file1.WriteString((LPCTSTR)buff);
sprintf(buff,"%f\n",shiftValue);
file1.WriteString((LPCTSTR)buff);
file1.WriteString((LPCTSTR)textBox1Text);
file1.Close();
return true;
}
void CMediaPlayerVCDlg::OnBnClickedAbout()
{
// TODO: 在此添加控件通知处理程序代码
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -