?? datadispaly.cpp
字號(hào):
// 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);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -