我一直用VS2005,网上的代码有SINT数据类型,是否就是int? //申请内存空间,存放波形数据
 SINT *pDataTemp = (SINT *)malloc(sizeof(SINT));
 memset(pDataTemp,0,sizeof(SINT));//波形绘制函数
void DrawWave(FILE * WavFile,int SumPot)
{
     //获取客户窗口大小位置
     CWnd *LeftWnd = GetDlgItem(IDC_WAVEL);
     CRect leftrect;
     LeftWnd->GetClientRect(&leftrect);     CWnd *RightWnd = GetDlgItem(IDC_WAVER);
     CRect rightrect;
     RightWnd->GetClientRect(&rightrect);     int leftHeight = leftrect.Height(),leftWidth = leftrect.Width();
     int rightHeight = rightrect.Height(),rightWidth = rightrect.Width();     //将客户窗口背景色设置为黑色
     CClientDC leftdc(LeftWnd);
     leftdc.FillSolidRect(&leftrect,RGB(0,0,0));
     CClientDC rightdc(RightWnd);
     rightdc.FillSolidRect(&rightrect,RGB(0,0,0));     //画中线,白色
     CPen pen(PS_SOLID,0,RGB(255,255,255));
     leftdc.SelectObject(&pen);
     leftdc.MoveTo(0,leftHeight/2);
     leftdc.LineTo(leftWidth,leftHeight/2);     rightdc.SelectObject(&pen);
     rightdc.MoveTo(0,rightHeight/2);
     rightdc.LineTo(rightWidth,rightHeight/2);     //选择绿色实线画笔,并将画笔移动到起点
     pen.DeleteObject();
     pen.CreatePen(PS_SOLID,1,RGB(0,255,0));
     leftdc.SelectObject(&pen);
     leftdc.MoveTo(0,leftHeight/2);     //申请内存空间,存放波形数据
     SINT *pDataTemp = (SINT *)malloc(sizeof(SINT));
      memset(pDataTemp,0,sizeof(SINT));     //画左声道波形
     int xl,yl;     for(int i=0;i<SumPot;i++)
     {
          //读取波形数据进入内存临时空间
          fseek(WavFile,44+i*4,SEEK_SET);
          fread(pDataTemp,sizeof(SINT),1,WavFile);
          //将波形数据存入数组中
          leftData[i] = *pDataTemp + 32768;          //计算画图比例
          yl = leftHeight/2*abs(*pDataTemp)/32768;
          xl = leftWidth*i/SumPot;          if(*pDataTemp>=0)
               leftdc.LineTo(xl,leftHeight/2-yl);
          else
               leftdc.LineTo(xl,leftHeight/2+yl);
     }     //选择绿色画笔作为右声道图形颜色,并将画笔移动至起点
     int xr,yr;
     rightdc.SelectObject(&pen);
     rightdc.MoveTo(0,rightHeight/2);     //画右声道波形
     for(int i=0;i<SumPot;i++)
     {
          //读取波形数据进入内存临时空间
          fseek(WavFile,46+i*4,SEEK_SET);
          fread(pDataTemp,sizeof(SINT),1,WavFile);
          //将波形数据存入数组中
          rightData[i] = *pDataTemp + 32768;          //计算画图比例
          yr= rightHeight/2*abs(*pDataTemp)/32768;
          xr = rightWidth*i/SumPot;          if(*pDataTemp>=0)
               rightdc.LineTo(xr,rightHeight/2-yr);
          else
               rightdc.LineTo(xr,rightHeight/2+yr);
      }
     free(pDataTemp);}参数说明:WavFile是一个指向FILE文件类型的指针,可以用WavFile = fopen("文件路径","r")获得,SumPot是总采样点数,可以通过WAV文件头中的信息得到,函数中的IDC_WAVEL何IDC_WAVER分别是左右声道的绘图控件ID。
本代码在windows7下的VS2008编译环境中编译通过。