⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datadispaly.cpp

📁 电子相册程序,实现图片的浏览,放大缩小等动能!evc4.0下编译通过!
💻 CPP
字号:
// DataDispaly.cpp : implementation file
//

#include "stdafx.h"
#include "DataDispaly.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDataDispaly

CDataDispaly::CDataDispaly()
{
	m_CurPos = 0;
	m_DataStep = DATA_STEP_LEN;
	m_PrePoint.x = 0;
	m_PrePoint.y = 0;
}

CDataDispaly::~CDataDispaly()
{

	if(m_BkDC.GetSafeHdc() != NULL)
	{
		m_BkDC.DeleteDC();
	}

    if(m_TempDC.GetSafeHdc() != NULL)
	{
		m_TempDC.DeleteDC();
	}
}


BEGIN_MESSAGE_MAP(CDataDispaly, CStatic)
	//{{AFX_MSG_MAP(CDataDispaly)
	ON_WM_PAINT()
	ON_WM_NCHITTEST()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDataDispaly message handlers

BOOL CDataDispaly::Create(DWORD dwStyle, CRect &rect, CWnd *pParent, UINT id)
{
	BOOL result ;
	result =  CStatic::Create(NULL, dwStyle, rect, pParent, id);

	m_rcClient.left = 0;
	m_rcClient.top =  0;
	m_rcClient.right = rect.Width();
	m_rcClient.bottom = rect.Height() ;

	InitParam();
	InitUserDC();

	return result;

}

void CDataDispaly::InitParam()
{
	m_clrBkGround = RGB(0,0,0);
	m_clrGrid = RGB(0,70,0);
	m_clrDate = RGB(0,255,0);
	m_iInterval = 10;
}

void CDataDispaly::InitUserDC()
{
	CPaintDC dc(this);

	if(m_BkDC.GetSafeHdc() == NULL) 
	{
		m_BkDC.CreateCompatibleDC(&dc);
		m_BkBitmap.CreateCompatibleBitmap(&dc, m_rcClient.Width(), m_rcClient.Height());
		m_BkDC.SelectObject(&m_BkBitmap);
	}

	if(m_TempDC.GetSafeHdc() == NULL) 
	{
		m_TempDC.CreateCompatibleDC(&dc);
		m_TempBitmap.CreateCompatibleBitmap(&dc, m_rcClient.Width(), m_rcClient.Height());
		m_TempDC.SelectObject(&m_TempBitmap);
	}
	DrawGrid(&m_BkDC);
	m_TempDC.BitBlt(0, 0, m_rcClient.Width(), m_rcClient.Height(), &m_BkDC, 0, 0, SRCCOPY);
}

void CDataDispaly::ResoreBK()
{
	DrawGrid(&m_BkDC);
	m_TempDC.BitBlt(0, 0, m_rcClient.Width(), m_rcClient.Height(), &m_BkDC, 0, 0, SRCCOPY);
	Invalidate();

	m_CurPos = 0;
	m_DataStep = DATA_STEP_LEN;
	m_PrePoint.x = 0;
	m_PrePoint.y = 0;
	
}
void CDataDispaly::DrawGrid(CDC *pDC)
{
	int i, j, x, y;

	x = m_rcClient.Height() / m_iInterval;
	y = m_rcClient.Width() / m_iInterval;

	DrawBackGruond(pDC);

	CPen  pen;
	CPen* oldpen;
	pen.CreatePen(PS_SOLID, 1, m_clrGrid);	   
	oldpen=pDC->SelectObject(&pen);

	pDC->MoveTo(m_rcClient.left,	m_rcClient.top);
	pDC->LineTo(m_rcClient.right,	m_rcClient.top);
	pDC->LineTo(m_rcClient.right,	m_rcClient.bottom-1);
	pDC->LineTo(m_rcClient.left,	m_rcClient.bottom-1);
	pDC->LineTo(m_rcClient.left,	m_rcClient.top);

	for(i = 1; i < x+1; i++)
	{
		pDC->MoveTo(0, m_iInterval * i);
		pDC->LineTo(m_rcClient.Width(), m_iInterval * i);
	}
	for(j = 1; j < y+1; j++)
	{
		pDC->MoveTo(m_iInterval * j, 0);
		pDC->LineTo(m_iInterval * j, m_rcClient.Height());
	}

	pDC->SelectObject(oldpen);
	pen.DeleteObject();
}

void CDataDispaly::DrawBackGruond(CDC *pDC)
{
	pDC->FillSolidRect(m_rcClient,m_clrBkGround);
}


void CDataDispaly::DrawData(int* pData)
{
	CPen  pen, penMid;
	CPen* oldpen;
	pen.CreatePen(PS_SOLID, 1, m_clrDate);	  
	penMid.CreatePen(PS_SOLID, 1, RGB(255,0,0));	
	oldpen=m_TempDC.SelectObject(&pen);

	m_TempDC.MoveTo(m_PrePoint);
	m_TempDC.BitBlt(m_CurPos, 0, m_DataStep, m_rcClient.Height(), &m_BkDC, m_CurPos, 0, SRCCOPY);
	//画新线
	for(int i = 0; i < m_DataStep; i++)
	{
		m_TempDC.LineTo(m_CurPos + i, (int)(pData[i]));
	}
	//画扫描线
	m_TempDC.SelectObject(&oldpen);
	oldpen = m_TempDC.SelectObject(&penMid);
	m_TempDC.MoveTo(m_CurPos + m_DataStep, 0);
	m_TempDC.LineTo(m_CurPos + m_DataStep, m_rcClient.Height());

	m_CurPos += m_DataStep;
	m_PrePoint.x = m_CurPos -1;
	
	if (m_CurPos  > m_rcClient.Width() + 1)
	{
		m_CurPos = 0;
		m_PrePoint.x = 0;
	}
	i --;
	m_PrePoint.y = pData[i];

	m_TempDC.SelectObject(oldpen);
	pen.DeleteObject();
	penMid.DeleteObject();

	Invalidate();
}

void CDataDispaly::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	dc.BitBlt(0,0,m_rcClient.Width(),m_rcClient.Height(),&m_TempDC,0,0,SRCCOPY);
	// Do not call CStatic::OnPaint() for painting messages
}

void CDataDispaly::SetDataColor(COLORREF dataColor)
{
	m_clrDate = dataColor;
}

UINT CDataDispaly::OnNcHitTest(CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	return CStatic::OnNcHitTest(point);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -