CMyDlg.h:
afx_msg void OnMM_WIM_DATA(UINT wParam,LONG lParam);
DECLARE_MESSAGE_MAP()CMyDlg.cpp:
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
ON_MESSAGE(MM_WIM_DATA,OnMM_WIM_DATA)
END_MESSAGE_MAP()//录音部分
flag = FALSE;

//分配缓冲
pPlayBuf = (PBYTE)malloc(INP_BUFFER_SIZE);
pRecBuf = (PBYTE)malloc(INP_BUFFER_SIZE);
if (!pPlayBuf || !pRecBuf) 
{
if (pPlayBuf) free(pPlayBuf);
if (pRecBuf) free(pRecBuf);
return ;
}
//填充数据格式
memset(&wavefmt,0,sizeof(wavefmt));
wavefmt.wFormatTag = WAVE_FORMAT_PCM;  //数据格式,一般为WAVE_FORMAT_PCM即脉冲编码
wavefmt.nChannels = 1;                 //声道
wavefmt.nSamplesPerSec = 11025;        //采样频率
wavefmt.wBitsPerSample = 8;           //样本大小 
wavefmt.nBlockAlign = 1;
wavefmt.nAvgBytesPerSec = 11025; //每秒数据量
wavefmt.cbSize = 0; //线程模式  MFC线程消息的宏为:ON_THREAD_MESSAGE
if(::waveInOpen(&hwi,WAVE_MAPPER,&wavefmt,(DWORD)this->m_hWnd,NULL,CALLBACK_THREAD))
{
free(pPlayBuf);
free(pRecBuf);
return;
}
//填充缓存格式
pwhdr1->lpData = (LPTSTR)pPlayBuf;
pwhdr1->dwBufferLength = INP_BUFFER_SIZE;
pwhdr1->dwBytesRecorded=0;   //已录音的字节长度
pwhdr1->dwUser=0;
pwhdr1->dwFlags=0;
pwhdr1->dwLoops=1;           //循环次数
pwhdr1->lpNext=NULL;
pwhdr1->reserved=0;
::waveInPrepareHeader(hwi,pwhdr1,sizeof(WAVEHDR)); pwhdr2->lpData = (LPTSTR)pRecBuf;
pwhdr2->dwBufferLength = INP_BUFFER_SIZE;
pwhdr2->dwBytesRecorded=0;   //已录音的字节长度
pwhdr2->dwUser=0;
pwhdr2->dwFlags=0;
pwhdr2->dwLoops=1;           //循环次数
pwhdr2->lpNext=NULL;
pwhdr2->reserved=0;
::waveInPrepareHeader(hwi,pwhdr2,sizeof(WAVEHDR)); //给输入设备增加缓存
::waveInAddBuffer(hwi,pwhdr1,sizeof(WAVEHDR));
::waveInAddBuffer(hwi,pwhdr2,sizeof(WAVEHDR)); //开始录音
dwDataLength = 0 ;
result = ::waveInStart(hwi);
if(result==MMSYSERR_NOERROR)
AfxMessageBox("没错误");void CMyDlg::OnMM_WIM_DATA(UINT wParam,LONG lParam)
{
pSaveBuf = (PBYTE)realloc (pSaveBuf, dwDataLength +
((PWAVEHDR) lParam)->dwBytesRecorded) ;

if(flag)
{
waveInClose (hwi) ;
return ;
}
CopyMemory (pSaveBuf + dwDataLength, ((PWAVEHDR) lParam)->lpData,
((PWAVEHDR) lParam)->dwBytesRecorded) ;

dwDataLength += ((PWAVEHDR) lParam)->dwBytesRecorded ;


waveInAddBuffer (hwi, (PWAVEHDR) lParam, sizeof (WAVEHDR)) ;

return ;}