numeric oscilloscope

  1. /*--------------------------------------------------------------------------------
  2. 'Nom du projet : Oscilloscope
  3. 'Outil : Visual C++ 6
  4. 'Nom du fichier: Scope.cpp : implementation file
  5. 'Realisation:Mathieu Texier et Emmanuel Traineau
  6. 'Date: Juin 2003
  7. 'Responsable: Eric Meleiro
  8. '--------------------------------------------------------------------------------
  9.  
  10.  
  11.  
  12. Explications : Gestion de l'affichage des données à l'écran
  13.  
  14. */
  15.  
  16.  
  17. #include "stdafx.h"
  18. #include "oscillo.h"
  19. #include "Scope.h"
  20.  
  21. #ifdef _DEBUG
  22. #define new DEBUG_NEW
  23. #undef THIS_FILE
  24. static char THIS_FILE[] = __FILE__;
  25. #endif
  26.  
  27. extern int m_time;
  28.  
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CScope
  31.  
  32. CScope::CScope()
  33. {
  34.         hdc = 0;
  35.         hwnd = 0;
  36. }
  37.  
  38. CScope::~CScope()
  39. {
  40.  
  41. }
  42.  
  43.  
  44. BEGIN_MESSAGE_MAP(CScope, CStatic)
  45.         //{{AFX_MSG_MAP(CScope)
  46.         ON_WM_DESTROY()
  47.         ON_WM_PAINT()
  48.         //}}AFX_MSG_MAP
  49. END_MESSAGE_MAP()
  50.  
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CScope message handlers
  53.  
  54.  
  55. void CScope::OnDestroy()
  56. {
  57.         ::ReleaseDC (hwnd, hdc);
  58.         ::DeleteObject (hp_green);
  59.         delete [] pts;
  60.         CStatic::OnDestroy();
  61. }
  62.  
  63. // fonction d'initialisation de l'écran (n'intervient pas lors de la lecture)
  64. void CScope::OnPaint()
  65. {
  66.         //Les initialisations Windows sont faits ici,
  67.         //car la classe mère CStatic ne reçoit pas de WM_CREATE !!!!
  68.  
  69.         if (!hdc)
  70.         {       RECT rect;
  71.                 GetClientRect (&rect);
  72.                 cx = rect.right;        // longueur de la fenètre d'affichage
  73.                 cy = rect.bottom;       // largeur de la fenètre d'affichage
  74.                 cy2 = cy/2;
  75.                 cyscope = cy2;          // Milieu vertical
  76.                 hwnd = GetSafeHwnd();   //handle de la fenètre
  77.                 hdc = ::GetDC (hwnd);   //handle de la fenète d'affichage
  78.                 hp_green = ::CreatePen (PS_SOLID, 1, RGB(0,255,0));  //définition du pinceau vert
  79.                 ::SelectObject (hdc, hp_green); //selection de se pinceau
  80.                 pts = new POINT[cx];    // création d'un nouveaux point
  81.                 Reset();
  82.         }
  83.  
  84.         PAINTSTRUCT ps;
  85.         ::BeginPaint (hwnd, &ps);
  86.         ::PatBlt (hdc, 0, 0, cx, cy, BLACKNESS);        //remplis la fenètre de noir
  87.         ::Polyline (hdc, pts, cx);              //affiche la courbe
  88.         Quadrillage();                                  //affiche la grille
  89.         ::EndPaint (hwnd, &ps);
  90. }
  91.  
  92.  
  93. ///////////////////////// Eigene Methoden /////////////////////
  94. //
  95.  
  96. // reset de l'affichage de la courbe
  97. void CScope::Reset (void)
  98. {
  99.         int s;
  100.         for (s=0; s<cx; s++)
  101.         {       pts[s].x = s;
  102.                 pts[s].y = cy2;
  103.         }
  104.         ::PatBlt (hdc, 0, 0, cx, cy, BLACKNESS);
  105.         ::Polyline (hdc, pts, cx);
  106.         Quadrillage();
  107. }
  108.  
  109.  
  110. // Affichage de la grille
  111. void CScope::Quadrillage()
  112. {
  113. ::SelectObject(hdc, GetStockObject(WHITE_PEN));
  114.  
  115.        
  116.                 for (qdx=0; qdx<=10; qdx++)
  117.                 {
  118.                        
  119.                         ::MoveToEx(hdc,qdx*(cx/10) ,0 , NULL);
  120.                         ::LineTo(hdc,qdx*(cx/10) , cy);
  121.        
  122.                 }
  123.  
  124.  
  125.                 for (qdy=0; qdy<=8; qdy++)
  126.                 {
  127.                        
  128.                         ::MoveToEx(hdc, 0,qdy*(cy/8) , NULL);
  129.                         ::LineTo(hdc,cx ,qdy*(cy/8));
  130.        
  131.                 }
  132.  
  133.  
  134. }
  135.  
  136.  

contact - link to this site