MFC AppDlg.cpp
资源名称:111.rar [点击查看]
上传用户:mony888
上传日期:2022-07-26
资源大小:1247k
文件大小:10k
源码类别:
Windows CE
开发平台:
Visual C++
- // MFC AppDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "MFC App.h"
- #include "MFC AppDlg.h"
- //#include "Shobjidl.h"
- //#include "Aygshell.h"
- #include "AMR_Fixed_Codec.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- #define AMR_MAGIC_NUMBER "#!AMRn"
- #define AMR_MAGIC_LEN 6
- #define ENCMODE MR122
- /////////////////////////////////////////////////////////////////////////////
- // CMFCAppDlg dialog
- #define MMRETCHECK(ret)
- if ( ret != MMSYSERR_NOERROR ) { goto Error; }
- CMFCAppDlg::CMFCAppDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CMFCAppDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CMFCAppDlg)
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
- }
- void CMFCAppDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CMFCAppDlg)
- DDX_Control(pDX, IDC_BtVol, m_btVol);
- DDX_Control(pDX, IDC_sliderVol, m_slidVol);
- DDX_Control(pDX, IDC_staticWave, m_staticWave);
- DDX_Control(pDX, IDC_btPlay, m_btPlay);
- DDX_Control(pDX, IDC_slidIndex, m_slidIndex);
- DDX_Control(pDX, IDC_btPause, m_btPaus);
- DDX_Control(pDX, IDC_btClos, m_btClos);
- DDX_Control(pDX, IDC_btRec, m_btRec);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CMFCAppDlg, CDialog)
- //{{AFX_MSG_MAP(CMFCAppDlg)
- ON_BN_CLICKED(IDC_btRec, OnRec)
- ON_BN_CLICKED(IDC_btClos, OnClosRec)
- ON_BN_CLICKED(IDC_btPause, OnPaus)
- ON_BN_CLICKED(IDC_btPlay, OnbtPlay)
- ON_WM_TIMER()
- ON_BN_CLICKED(IDC_BtVol, OnBtVol)
- ON_WM_CLOSE()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMFCAppDlg message handlers
- BOOL CMFCAppDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // CWnd* w = GetDesktopWindow();
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
- CenterWindow(GetDesktopWindow()); // center to the hpc screen
- SetWindowPos(this, 0, 25, 240, 294, TRUE);
- UpdateWindow();
- // TODO: Add extra initialization here
- // m_btRec.SetIcon(AfxGetApp()->LoadIcon(IDI_ICONRec), TRUE);
- // m_btClos.SetIcon(AfxGetApp()->LoadIcon(IDI_ICONStop), TRUE);
- // m_btPlay.SetIcon(AfxGetApp()->LoadIcon(IDI_ICONPlay), TRUE);
- // m_btPaus.SetIcon(AfxGetApp()->LoadIcon(IDI_ICONPause), TRUE);
- m_btPaus.EnableWindow(FALSE);
- m_btClos.EnableWindow(FALSE);
- m_btPlay.EnableWindow(TRUE);
- m_slidIndex.SetRange(0, 100, FALSE);
- m_slidVol.SetRange(0, 100, FALSE);
- m_bRecFlag = FALSE;
- m_bPlayFlag = FALSE;
- return TRUE; // return TRUE unless you set the focus to a control
- }
- UINT RecProc( LPVOID pParam )
- {
- MMRESULT mRet;
- BOOL bRet;
- CMFCAppDlg* pDlg;
- pDlg = (CMFCAppDlg*)pParam;
- mRet = Recorder().OpenMic();
- MMRETCHECK(mRet);
- pDlg->m_nTimer = SetTimer(pDlg->m_hWnd, 1, 200, NULL);
- while (pDlg->m_bRecFlag)
- {
- mRet = Recorder().ToRec();
- MMRETCHECK(mRet);
- }
- mRet = Recorder().ClosMic();
- MMRETCHECK(mRet);
- mRet = Recorder().ClosRecord();
- MMRETCHECK(mRet);
- bRet = CloseHandle(Recorder().m_fh);
- if (!bRet)
- {
- goto Error;
- }
- // SetFilePointer(Recorder().m_fh, 0, NULL, FILE_BEGIN);
- // bRet = WriteFile(Recorder().m_fh, (PCHAR)&m_WaveHeader, 44L, &cbBytsDone, NULL);
- // if (!bRet || cbBytsDone < AMR_MAGIC_LEN)
- // {
- // goto Error;
- // }
- return 1;
- Error:
- LPVOID lpMsgBuf;
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- 0,
- (LPTSTR)&lpMsgBuf,
- 0,
- NULL);
- AfxMessageBox((LPCTSTR)lpMsgBuf, MB_OK | MB_ICONINFORMATION, 0);
- LocalFree(lpMsgBuf);
- return 0;
- }
- void CMFCAppDlg::OnRec()
- {
- // TODO: Add your control notification handler code here
- DWORD cbBytsDone;
- WAVEFORMATEX wfx;
- MMRESULT mRet;
- BOOL bRet;
- CodecInterfaceType* pAMR_Codec_Interf;
- wfx.cbSize = 0;
- wfx.wFormatTag = WAVE_FORMAT_PCM;
- wfx.nChannels = 1;
- wfx.nSamplesPerSec = 8000;
- wfx.wBitsPerSample = 16;
- wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8;
- wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
- m_bRecFlag = TRUE;
- mRet = Recorder().InitRecord(wfx);
- MMRETCHECK(mRet);
- pAMR_Codec_Interf = Get_AMR_EncInterface();
- Recorder().SetCodecInterface(*pAMR_Codec_Interf);
- Recorder().m_fh = CreateFile(TEXT("sound.amr"), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- if (NULL == Recorder().m_fh)
- {
- goto Error;
- }
- bRet = WriteFile(Recorder().m_fh, (PCHAR)AMR_MAGIC_NUMBER, AMR_MAGIC_LEN, &cbBytsDone, NULL);
- if (!bRet || cbBytsDone < AMR_MAGIC_LEN)
- {
- goto Error;
- }
- //Record start ~~~
- m_nRecThreadID = AfxBeginThread(RecProc, this, 0, 0, 0, NULL)->m_nThreadID;
- m_nTimer = SetTimer(1, 200, NULL);
- m_iPosCount = 0;
- m_btRec.EnableWindow(FALSE);
- m_btPlay.EnableWindow(FALSE);
- m_btClos.EnableWindow(TRUE);
- return;
- Error:
- LPVOID lpMsgBuf;
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- 0,
- (LPTSTR)&lpMsgBuf,
- 0,
- NULL);
- AfxMessageBox((LPCTSTR)lpMsgBuf, MB_OK | MB_ICONINFORMATION, 0);
- LocalFree(lpMsgBuf);
- return;
- }
- void CMFCAppDlg::OnClosRec()
- {
- // TODO: Add your control notification handler code here
- KillTimer(m_nTimer);
- if (m_bRecFlag)
- {
- m_bRecFlag = FALSE;
- m_slidIndex.SetPos(0);
- m_btClos.EnableWindow(FALSE);
- m_btRec.EnableWindow(TRUE);
- m_btPlay.EnableWindow(TRUE);
- }
- else
- {
- /**/
- m_xplayer.xplaying_command(CPC_STOP, 0);
- /**/
- m_bPlayFlag = FALSE;
- m_slidIndex.SetPos(0);
- m_btClos.EnableWindow(FALSE);
- m_btPaus.EnableWindow(FALSE);
- m_btRec.EnableWindow(TRUE);
- m_btPlay.EnableWindow(TRUE);
- }
- return;
- }
- void CMFCAppDlg::OnPaus()
- {
- // TODO: Add your control notification handler code here
- /**/
- m_xplayer.xplaying_command(CPC_PAUSE, 0);
- KillTimer(m_nTimer);
- /**/
- m_btPaus.EnableWindow(FALSE);
- m_btPlay.EnableWindow(TRUE);
- return;
- }
- void CMFCAppDlg::OnbtPlay()
- {
- // TODO: Add your control notification handler code here
- if (m_bPlayFlag)
- {
- /**/
- m_xplayer.xplaying_command(CPC_PLAY, 0);
- m_nTimer = SetTimer(2, 200, NULL);
- /**/
- m_btPaus.EnableWindow(TRUE);
- m_btClos.EnableWindow(TRUE);
- m_btPlay.EnableWindow(FALSE);
- m_btRec.EnableWindow(FALSE);
- }
- else
- {
- /**/
- SYS_FILE_CONTENT_TYPE flTarget;
- /**/
- m_nTimer = SetTimer(2, 200, NULL);
- m_uiTimer2Count = 0;
- m_btPlay.EnableWindow(FALSE);
- m_btRec.EnableWindow(FALSE);
- m_btClos.EnableWindow(TRUE);
- m_btPaus.EnableWindow(TRUE);
- /**/
- memset(&flTarget, 0, sizeof(SYS_FILE_CONTENT_TYPE));
- flTarget.ModeInd = SYS_FILE_DISK_FILE_TYPE;
- strncpy(flTarget.filename, "sound.amr", sizeof("sound.amr"));
- // m_xplayer.xplaying_get_volume(&m_uiVolIndex);
- // m_xplayer.xplaying_set_volume(m_uiVolIndex);
- m_slidVol.SetPos(50);
- m_bPlayFlag = TRUE;
- m_xplayer.xplaying_open(&flTarget, NULL);
- m_xplayer.xplaying_get_play_Timelen(&m_uiPlayTime);
- /**/
- }
- return;
- }
- void CMFCAppDlg::OnTimer(UINT nIDEvent)
- {
- // TODO: Add your message handler code here and/or call default
- if(nIDEvent == 1)
- {
- // static const int xCon = 13;
- // static const int yCon = 13;
- // static const int wCon = 240;
- // static const int hCon = 80;
- // CClientDC dc(this);
- // CBitmap Bitmap;
- // CBitmap * pbmOld = NULL;
- // CDC dcMem;
- // dcMem.CreateCompatibleDC(&dc);
- // Bitmap.CreateCompatibleBitmap(&dc,wCon,hCon);
- // pbmOld = dcMem.SelectObject(&Bitmap);
- // dcMem.PatBlt(0,0,wCon,hCon, BLACKNESS);
- // dcMem.MoveTo(0,hCon/2);
- // //
- // // display incomming signal--key idea!
- // //
- // for(int x =0 ; x < wCon; x++) // display Input
- // {
- // dcMem.LineTo(x,(hCon >> 1) - (Recorder().InputBuffer[x] >> 7));
- // }
- // dc.BitBlt(xCon,yCon,wCon,hCon,&dcMem, 0, 0, SRCCOPY);
- // dcMem.SelectObject(pbmOld);
- // dcMem.DeleteDC();
- m_slidIndex.SetPos(m_iPosCount);
- m_iPosCount = (m_iPosCount++) % 101;
- }
- else if (nIDEvent == 2)
- {
- /**/
- unsigned int uiProg;
- m_uiTimer2Count++;
- uiProg = m_uiTimer2Count * 20000 / m_uiPlayTime;
- if (uiProg < 99)
- {
- m_slidIndex.SetPos(uiProg);
- }
- else
- {
- KillTimer(m_nTimer);
- m_slidIndex.SetPos(0);
- m_xplayer.xplaying_command(CPC_STOP, 0);
- m_bPlayFlag = FALSE;
- m_slidIndex.SetPos(0);
- m_btClos.EnableWindow(FALSE);
- m_btPaus.EnableWindow(FALSE);
- m_btRec.EnableWindow(TRUE);
- m_btPlay.EnableWindow(TRUE);
- }
- /**/
- }
- else
- {
- CDialog::OnTimer(nIDEvent);
- }
- return;
- }
- void CMFCAppDlg::OnBtVol()
- {
- // TODO: Add your control notification handler code here
- if (m_slidVol.IsWindowVisible())
- {
- m_slidVol.ShowWindow(FALSE);
- }
- else
- {
- m_slidVol.ShowWindow(TRUE);
- }
- return;
- }
- BOOL CMFCAppDlg::PreTranslateMessage(MSG* pMsg)
- {
- // TODO: Add your specialized code here and/or call the base class
- if (pMsg->hwnd == m_slidVol.m_hWnd)
- {
- switch(pMsg->message)
- {
- case WM_LBUTTONUP:
- {
- m_uiVolIndex = (unsigned int)::SendMessage(m_slidVol.m_hWnd, TBM_GETPOS, 0, 0);
- }
- break;
- default:
- break;
- }
- }
- return CDialog::PreTranslateMessage(pMsg);
- }
- void CMFCAppDlg::OnClose()
- {
- // TODO: Add your message handler code here and/or call default
- MMRESULT mRet;
- BOOL bRet;
- if (m_bRecFlag)
- {
- mRet = Recorder().ClosMic();
- MMRETCHECK(mRet);
- mRet = Recorder().ClosRecord();
- MMRETCHECK(mRet);
- bRet = CloseHandle(Recorder().m_fh);
- if (!bRet)
- {
- goto Error;
- }
- }
- CDialog::OnClose();
- return;
- Error:
- LPVOID lpMsgBuf;
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- 0,
- (LPTSTR)&lpMsgBuf,
- 0,
- NULL);
- AfxMessageBox((LPCTSTR)lpMsgBuf, MB_OK | MB_ICONINFORMATION, 0);
- LocalFree(lpMsgBuf);
- CDialog::OnClose();
- return;
- }