26.1.7 开发具有记忆功能的MP3播放器
通过MCIWndGetPosition()宏接收当前MCI设备的播放位置,可以实现具有记忆功能的MP3播放器。宏原型为:
- LONG MCIWndGetPosition( hwnd ); // 指定MCIWnd对话框的句柄
此函数的返回值为当前位置值。MCIWndGetLength()函数可以返回正在播放的文件的长度。MCIWndGetPosition()函数可以返回播放的MP3文件的当前位置。MCIWndStop()函数可以停止当前播放文件。MCIWndDestroy()函数可以关闭指定的MCIWnd对话框。下面的代码使用这些函数,实现一个具有记忆功能的MP3播放器。
- void CSoundSampleDlg::OnButtonPlaymp3() // 具
有记忆功能的MP3播放器 - {
- int type=0;
- if (m_hWndMCI == NULL) // 判
断MCI句柄是否为NULL - {
- fileName="雨中节奏.mp3"; // 赋值mp3文件名
- // 创建MIDI播放器
- m_hWndMCI=MCIWndCreate(m_hWnd, AfxGetInstanceHandle(), type,
- fileName);
- MCIWndPlay(m_hWndMCI); // 启用MIDI播放器
- return;
- }
- // 为MIDI播放器设置新文件名
- m_hWndMCI=MCIWndCreate(m_hWnd,AfxGetInstanceHandle(),
type, fileName); - long nLength = MCIWndGetLength(m_hWndMCI);
// 获取文件长度 - MCIWndPlayFromTo(m_hWndMCI, m_lPosition, nLength);
// 定位播放 - }
- void CSoundSampleDlg::OnButtonStopmp3()
// 停止播放MP3 - { //停止播放MP3
- MCIWndGetFileName(m_hWndMCI, fileName.GetBuffer(1000), 1000);
-
// 获取文件名 - m_lPosition = MCIWndGetPosition(m_hWndMCI);
// 获取当前播放的位置 - MCIWndStop(m_hWndMCI);
// 停止播放 - MCIWndDestroy(m_hWndMCI);
// 销毁MIDI播放器 - }
上面代码中OnButtonPlaymp3()函数实现播放MP3文件的功能。其中会首先判断是否打开过播放器,如果第一次打开播放器,则会初始化播放的文件为"雨中节奏.mp3",并从头开始播放;如果不是第一次打开播放器,则会打开上次关闭时播放的文件,并从上次关闭时播放到的位置开始播放MP3文件。OnButtonStopmp3()函数是停止播放按钮的处理函数。关闭MCIWnd对话框之前,记录正在播放的MP3文件和当前的播放位置,并停止播放MP3文件。这样,在播放MP3文件后,再次打开时,会从上次停止的位置开始播放MP3文件。