home *** CD-ROM | disk | FTP | other *** search
/ Large Pack of OldSkool DOS MOD Trackers / beaversweeper_v101.zip / src / TrackerScopes.cpp < prev    next >
C/C++ Source or Header  |  2003-01-06  |  3KB  |  165 lines

  1. // TrackerScopes.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "tracker.h"
  6. #include "TrackerScopes.h"
  7.  
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13.  
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CTrackerScopes dialog
  16.  
  17. CTrackerScopes::CTrackerScopes(): CMyDialogBar()
  18. {
  19.     //{{AFX_DATA_INIT(CTrackerScopes)
  20.         // NOTE: the ClassWizard will add member initialization here
  21.     //}}AFX_DATA_INIT
  22.   numScope=0;
  23.   hasupdate=0;
  24. }
  25.  
  26.  
  27. void CTrackerScopes::DoDataExchange(CDataExchange* pDX)
  28. {
  29.     CDialogBar::DoDataExchange(pDX);
  30.     //{{AFX_DATA_MAP(CTrackerScopes)
  31.         // NOTE: the ClassWizard will add DDX and DDV calls here
  32.     //}}AFX_DATA_MAP
  33. }
  34.  
  35.  
  36. BEGIN_MESSAGE_MAP(CTrackerScopes, CDialogBar)
  37.     //{{AFX_MSG_MAP(CTrackerScopes)
  38.     ON_WM_PAINT()
  39.     //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41.  
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CTrackerScopes message handlers
  44.  
  45. void CTrackerScopes::CreateScopes(int num)
  46. {
  47.   CDC *dc;
  48.   CRect rect;
  49.   int i,xp,xp2,h,yp;
  50.  
  51.   numScope = num;
  52.   if ((dc=GetDC ())==NULL) return;
  53.  
  54.   GetClientRect(&rect);
  55.  
  56.   if (numScope>8)
  57.     h = (rect.Height()/2) - 2;
  58.   else
  59.     h = rect.Height();
  60.  
  61.   xp=0;
  62.   yp=0;
  63.  
  64.  
  65.   if (numScope>8)
  66.   {
  67.     num=numScope>>1;
  68.     for (i=0;i<num;i++)  
  69.     {
  70.       xp = i*rect.Width()/(float)(num);
  71.       xp2 = (i+1)*rect.Width()/(float)(num);
  72.       dc->FillSolidRect(xp,yp,(xp2-xp)-2,h,0x0);    
  73.     }
  74.     yp = (rect.Height()/2);
  75.     
  76.   }
  77.  
  78.   for (i=0;i<num;i++)  
  79.   {
  80.     xp = i*rect.Width()/(float)(num);
  81.     xp2 = (i+1)*rect.Width()/(float)(num);
  82.     dc->FillSolidRect(xp,yp,(xp2-xp)-2,h,0);    
  83.   }
  84. }
  85. void CTrackerScopes::PrepareUpdate(int _idx, float *_buffer,DWORD _bufsize)
  86. {
  87.   idx=_idx;
  88.   buffer=_buffer;
  89.   bufsize=_bufsize;
  90.   hasupdate=1; 
  91. }
  92. static int count=0;
  93. void CTrackerScopes::Update()
  94. {
  95.   CDC *dc;
  96.   CRect rect;
  97.   int i,xp,xp2,h,yp,w,oxp,oyp;
  98.   DWORD pos,step;
  99.   COLORREF cr;
  100.   CGdiObject *old;
  101.  
  102.   if (!hasupdate) return;
  103.   
  104.   if ((dc=GetDC ())==NULL) return;  
  105.   GetClientRect(&rect);
  106.   
  107.   w=rect.Width()/(float)numScope;
  108.  
  109.   xp = idx * w;
  110.   xp2 = (idx+1) * w;
  111.   h = rect.Height();
  112.  
  113.   pos = 0;
  114.   step = (bufsize<<16) / w;
  115.   oxp=xp;
  116.   oyp=h/2;
  117.  
  118.   yp=0;
  119.   dc->FillSolidRect(xp,yp,(xp2-xp)-2,h,0x0);    
  120.   
  121.   old = dc->SelectStockObject(WHITE_PEN);
  122. // debug break special
  123.   if (count>20)
  124.     h=h;
  125.   count++;
  126.  
  127.   CString str;
  128.   str.Format("bufsize:%d\n",bufsize);
  129.   OutputDebugString(str);
  130.  
  131.   cr = RGB (255,255,0);
  132.   for (i=xp;i<xp2-4;i++)
  133.   {
  134.     yp=(-buffer[pos>>16] - 0.5) * h * 0.99 + h;
  135.     
  136.     dc->MoveTo(oxp,oyp);
  137.     dc->LineTo(i,yp);
  138.     oxp=i;
  139.     oyp=yp;
  140.  
  141.     pos+=step;
  142.   }
  143.  
  144.  
  145.   dc->MoveTo(oxp,oyp);
  146.   dc->LineTo(xp2-3,h/2);
  147.  
  148.   
  149.   dc->SelectObject(old);
  150.   ReleaseDC(dc);
  151.   
  152.   hasupdate=0; 
  153. }
  154.  
  155.  
  156. void CTrackerScopes::OnPaint() 
  157. {
  158.     CPaintDC dc(this); // device context for painting
  159.     
  160.     // TODO: Add your message handler code here
  161.   Update ();
  162.     
  163.     // Do not call CDialogBar::OnPaint() for painting messages
  164. }
  165.