⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediaplayervcdlg.cpp

📁 Repeat Easily 1.0 版 程序说明 这个小软件是用来练习英语听力用的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -