107 lines
2.1 KiB
C++
107 lines
2.1 KiB
C++
// showwave.cpp : implementation file
|
|
//
|
|
|
|
#include "..\stdafx.h"
|
|
#include "..\Client.h"
|
|
#include "ShowWave.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CShowWave
|
|
|
|
CShowWave::CShowWave()
|
|
{
|
|
m_nSize = 0;
|
|
m_nBits = -1;
|
|
m_hWnd = NULL;
|
|
|
|
brush.CreateSolidBrush(GetSysColor(COLOR_3DFACE));
|
|
}
|
|
|
|
CShowWave::~CShowWave()
|
|
{
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CShowWave, CStatic)
|
|
//{{AFX_MSG_MAP(CShowWave)
|
|
ON_WM_PAINT()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CShowWave message handlers
|
|
|
|
void CShowWave::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
|
|
// TODO: Add your message handler code here
|
|
::GetClientRect(m_hWnd,rcClient);
|
|
|
|
CBitmap Bitmap;
|
|
CBitmap* pbmOld = NULL;
|
|
CPen pen,*pOldPen;
|
|
pen.CreatePen(PS_SOLID,1,RGB(172,168,153));
|
|
CDC dcMem;
|
|
dcMem.CreateCompatibleDC(&dc);
|
|
Bitmap.CreateCompatibleBitmap(&dc,rcClient.right,rcClient.bottom);
|
|
pbmOld = dcMem.SelectObject(&Bitmap);
|
|
dcMem.FillRect(rcClient,&brush);
|
|
|
|
int x,y;
|
|
if(m_nSize>0&&m_nBits>0)
|
|
{
|
|
if(m_nBits==8)
|
|
{
|
|
pOldPen = dcMem.SelectObject(&pen);
|
|
dcMem.MoveTo(0,rcClient.bottom/2);
|
|
for (x=0;x<m_nSize;x++)
|
|
{
|
|
y=(int)((rcClient.bottom/2)-(DrawData[x]-128));
|
|
dcMem.LineTo(x,y);
|
|
}
|
|
dcMem.SelectObject(pOldPen);
|
|
}
|
|
else
|
|
{
|
|
short *pData = (short *)DrawData;
|
|
int nCount = m_nSize/2;
|
|
|
|
pOldPen = dcMem.SelectObject(&pen);
|
|
dcMem.MoveTo(0,rcClient.bottom/2);
|
|
for (x=0;x<nCount;x++)
|
|
{
|
|
y=(int)((rcClient.bottom/2)-(pData[x]-16384)*0.001);
|
|
|
|
dcMem.LineTo(x,y-16);
|
|
}
|
|
dcMem.SelectObject(pOldPen);
|
|
}
|
|
}
|
|
dc.BitBlt(0,0,rcClient.right,rcClient.bottom,&dcMem, 0, 0, SRCCOPY);
|
|
dcMem.SelectObject(pbmOld);
|
|
dcMem.DeleteDC();
|
|
// Do not call CStatic::OnPaint() for painting messages
|
|
}
|
|
|
|
void CShowWave::SetSoundInBuffer(BYTE *buff,int nSize,int nBits)
|
|
{
|
|
ASSERT(buff!=0);
|
|
ASSERT(nSize<=DRAWBUFFERSIZE);
|
|
ASSERT(nBits==8||nBits==16);
|
|
m_nBits = nBits;
|
|
m_nSize = nSize;
|
|
memcpy(DrawData,buff,nSize);
|
|
}
|
|
|
|
void CShowWave::SetHwnd(HWND hWnd)
|
|
{
|
|
m_hWnd = hWnd;
|
|
}
|