/*--------------------------------------------------------------------------------
'Nom du projet : Oscilloscope
'Outil : Visual C++ 6
'Nom du fichier: Scope.cpp : implementation file
'Realisation:Mathieu Texier et Emmanuel Traineau
'Date: Juin 2003
'Responsable: Eric Meleiro
'--------------------------------------------------------------------------------
Explications : Gestion de l'affichage des données à l'écran
*/
#include "stdafx.h"
#include "oscillo.h"
#include "Scope.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern int m_time;
/////////////////////////////////////////////////////////////////////////////
// CScope
CScope::CScope()
{
hdc = 0;
hwnd = 0;
}
CScope::~CScope()
{
}
BEGIN_MESSAGE_MAP(CScope, CStatic)
//{{AFX_MSG_MAP(CScope)
ON_WM_DESTROY()
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CScope message handlers
void CScope::OnDestroy()
{
::ReleaseDC (hwnd, hdc);
::DeleteObject (hp_green);
delete [] pts;
CStatic::OnDestroy();
}
// fonction d'initialisation de l'écran (n'intervient pas lors de la lecture)
void CScope::OnPaint()
{
//Les initialisations Windows sont faits ici,
//car la classe mère CStatic ne reçoit pas de WM_CREATE !!!!
if (!hdc)
{ RECT rect;
GetClientRect (&rect);
cx = rect.right; // longueur de la fenètre d'affichage
cy = rect.bottom; // largeur de la fenètre d'affichage
cy2 = cy/2;
cyscope = cy2; // Milieu vertical
hwnd = GetSafeHwnd(); //handle de la fenètre
hdc = ::GetDC (hwnd); //handle de la fenète d'affichage
hp_green = ::CreatePen (PS_SOLID, 1, RGB(0,255,0)); //définition du pinceau vert
::SelectObject (hdc, hp_green); //selection de se pinceau
pts = new POINT[cx]; // création d'un nouveaux point
Reset();
}
PAINTSTRUCT ps;
::BeginPaint (hwnd, &ps);
::PatBlt (hdc, 0, 0, cx, cy, BLACKNESS); //remplis la fenètre de noir
::Polyline (hdc, pts, cx); //affiche la courbe
Quadrillage(); //affiche la grille
::EndPaint (hwnd, &ps);
}
///////////////////////// Eigene Methoden /////////////////////
//
// reset de l'affichage de la courbe
void CScope::Reset (void)
{
int s;
for (s=0; s<cx; s++)
{ pts[s].x = s;
pts[s].y = cy2;
}
::PatBlt (hdc, 0, 0, cx, cy, BLACKNESS);
::Polyline (hdc, pts, cx);
Quadrillage();
}
// Affichage de la grille
void CScope::Quadrillage()
{
::SelectObject(hdc, GetStockObject(WHITE_PEN));
for (qdx=0; qdx<=10; qdx++)
{
::MoveToEx(hdc,qdx*(cx/10) ,0 , NULL);
::LineTo(hdc,qdx*(cx/10) , cy);
}
for (qdy=0; qdy<=8; qdy++)
{
::MoveToEx(hdc, 0,qdy*(cy/8) , NULL);
::LineTo(hdc,cx ,qdy*(cy/8));
}
}