2024-06-23 17:36:53 +08:00

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;
}