📄 vc12bview.cpp
字号:
// vc12bView.cpp : implementation of the CVc12bView class
//
#include "stdafx.h"
#include "vc12b.h"
#include "vc12bDoc.h"
#include "vc12bView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVc12bView
IMPLEMENT_DYNCREATE(CVc12bView, CView)
BEGIN_MESSAGE_MAP(CVc12bView, CView)
//{{AFX_MSG_MAP(CVc12bView)
ON_COMMAND(ID_PAUSE, OnPause)
ON_UPDATE_COMMAND_UI(ID_PAUSE, OnUpdatePause)
ON_COMMAND(ID_PLAY, OnPlay)
ON_UPDATE_COMMAND_UI(ID_PLAY, OnUpdatePlay)
ON_COMMAND(ID_STOP, OnStop)
ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStop)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_MESSAGE(MM_MCINOTIFY,OnNotify)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVc12bView construction/destruction
CVc12bView::CVc12bView()
{
// TODO: add construction code here
m_bPlay=FALSE;
m_bPause=FALSE;
m_MCIID=0;
}
CVc12bView::~CVc12bView()
{
DWORD ErrorWord;
if (m_MCIID!=0)
{
ErrorWord=mciSendCommand(m_MCIID,MCI_STOP,MCI_WAIT,NULL);
if(ErrorWord)
{
DoError(ErrorWord);
}
ErrorWord=mciSendCommand(m_MCIID,MCI_CLOSE,MCI_WAIT,NULL);
if(ErrorWord)
{
DoError(ErrorWord);
}
}
}
BOOL CVc12bView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CVc12bView drawing
void CVc12bView::OnDraw(CDC* pDC)
{
CVc12bDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CVc12bView printing
BOOL CVc12bView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CVc12bView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CVc12bView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CVc12bView diagnostics
#ifdef _DEBUG
void CVc12bView::AssertValid() const
{
CView::AssertValid();
}
void CVc12bView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CVc12bDoc* CVc12bView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CVc12bDoc)));
return (CVc12bDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CVc12bView message handlers
void CVc12bView::OnPause()
{
// TODO: Add your command handler code here
DWORD ErrorWord;
if(!m_bPause)
ErrorWord=mciSendCommand(m_MCIID,MCI_PAUSE,0,NULL);
else
ErrorWord=mciSendCommand(m_MCIID,MCI_RESUME,0,NULL);
if(ErrorWord)
{
DoError(ErrorWord);
return;
}
m_bPause=!m_bPause;
}
void CVc12bView::OnUpdatePause(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_bPause);
}
void CVc12bView::OnPlay()
{
// TODO: Add your command handler code here
DWORD ErrorWord;
MCI_PLAY_PARMS mciPlay;
if(!m_bPlay)
{
mciPlay.dwCallback=(long)GetSafeHwnd();
mciPlay.dwFrom=0;
ErrorWord=mciSendCommand(m_MCIID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciPlay);
if(ErrorWord)
{
DoError(ErrorWord);
return;
}
}
m_bPlay=TRUE;
}
void CVc12bView::OnUpdatePlay(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(!m_bPlay);
}
void CVc12bView::OnStop()
{
// TODO: Add your command handler code here
DWORD ErrorWord;
ErrorWord=mciSendCommand(m_MCIID,MCI_STOP,MCI_WAIT,NULL);
if(ErrorWord)
{
DoError(ErrorWord);
return;
}
m_bPlay=FALSE;
m_bPause=FALSE;
}
void CVc12bView::OnUpdateStop(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_bPlay);
}
void CVc12bView::OnFileOpen()
{
// TODO: Add your command handler code here
CString OpenFileStr;
CString lpszFilter ;
DWORD ErrorWord;
MCI_OPEN_PARMS mciOpen;
lpszFilter ="MIDI音频文件(*.mid)|*.mid|波形音频文件(*.wav)|*.wav||";
CFileDialog m_dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY
|OFN_OVERWRITEPROMPT,lpszFilter );
if(m_dlg.DoModal()==IDOK)
{
OpenFileStr=m_dlg.GetPathName();
if(m_bPlay)
{
ErrorWord=mciSendCommand(m_MCIID,MCI_CLOSE,0,NULL);
if(ErrorWord)
{
DoError(ErrorWord);
return;
}
}
mciOpen.lpstrDeviceType=NULL;
mciOpen.lpstrElementName=OpenFileStr;
ErrorWord=mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpen);
if(ErrorWord)
{
DoError(ErrorWord);
return;
}
m_MCIID=mciOpen.wDeviceID;
m_bPlay=FALSE;
m_bPause=FALSE;
}
}
void CVc12bView::DoError(DWORD ErrorWord)
{
char ErrorMessage[MAXERRORLENGTH];
if(mciGetErrorString(ErrorWord,(LPSTR)ErrorMessage,MAXERRORLENGTH))
{
MessageBox(ErrorMessage,"多媒体播放错误信息",MAXERRORLENGTH);
}
else
{
MessageBox("未知错误","多媒体播放错误信息",MAXERRORLENGTH);
}
}
LRESULT CVc12bView::OnNotify(WPARAM wParam)
{
if(wParam==MCI_NOTIFY_SUCCESSFUL)
{
m_bPlay=FALSE;
m_bPause=FALSE;
return 0;
}
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -