ReactOS  0.4.15-dev-3442-gc05a45e
graphctl.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  TGraphCtrl
 

Macros

#define MAX_PLOTS   4
 
#define MAX_CTRLS   4
 

Functions

double GraphCtrl_AppendPoint (TGraphCtrl *this, double dNewPoint0, double dNewPoint1, double dNewPoint2, double dNewPoint3)
 
void GraphCtrl_Create (TGraphCtrl *this, HWND hWnd, HWND hParentWnd, UINT nID)
 
void GraphCtrl_Dispose (TGraphCtrl *this)
 
void GraphCtrl_DrawPoint (TGraphCtrl *this)
 
void GraphCtrl_ShiftGrid (TGraphCtrl *this)
 
void GraphCtrl_InvalidateCtrl (TGraphCtrl *this, BOOL bResize)
 
void GraphCtrl_Paint (TGraphCtrl *this, HWND hWnd, HDC dc)
 
void GraphCtrl_Reset (TGraphCtrl *this)
 
void GraphCtrl_Resize (TGraphCtrl *this)
 
void GraphCtrl_SetBackgroundColor (TGraphCtrl *this, COLORREF color)
 
void GraphCtrl_SetGridColor (TGraphCtrl *this, COLORREF color)
 
void GraphCtrl_SetPlotColor (TGraphCtrl *this, int plot, COLORREF color)
 
void GraphCtrl_SetRange (TGraphCtrl *this, double dLower, double dUpper, int nDecimalPlaces)
 
INT_PTR CALLBACK GraphCtrl_WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 

Variables

WNDPROC OldGraphCtrlWndProc
 

Macro Definition Documentation

◆ MAX_CTRLS

#define MAX_CTRLS   4

Definition at line 26 of file graphctl.h.

◆ MAX_PLOTS

#define MAX_PLOTS   4

Definition at line 25 of file graphctl.h.

Function Documentation

◆ GraphCtrl_AppendPoint()

double GraphCtrl_AppendPoint ( TGraphCtrl this,
double  dNewPoint0,
double  dNewPoint1,
double  dNewPoint2,
double  dNewPoint3 
)

Definition at line 354 of file graphctl.c.

357 {
358  /* append a data point to the plot & return the previous point */
359  double dPrevious;
360 
361  dPrevious = this->m_dCurrentPosition[0];
362  this->m_dCurrentPosition[0] = dNewPoint0;
363  this->m_dCurrentPosition[1] = dNewPoint1;
364  this->m_dCurrentPosition[2] = dNewPoint2;
365  this->m_dCurrentPosition[3] = dNewPoint3;
366  GraphCtrl_ShiftGrid(this);
367  GraphCtrl_DrawPoint(this);
368  /* Invalidate(); */
369  return dPrevious;
370 }
void GraphCtrl_DrawPoint(TGraphCtrl *this)
Definition: graphctl.c:453
void GraphCtrl_ShiftGrid(TGraphCtrl *this)
Definition: graphctl.c:408

Referenced by PerformancePageRefreshThread().

◆ GraphCtrl_Create()

void GraphCtrl_Create ( TGraphCtrl this,
HWND  hWnd,
HWND  hParentWnd,
UINT  nID 
)

Definition at line 117 of file graphctl.c.

118 {
119  GraphCtrl_Init(this);
120  this->m_hParentWnd = hParentWnd;
121  this->m_hWnd = hWnd;
122 
123  GraphCtrl_Resize(this);
124 
125  return;
126 }
static void GraphCtrl_Init(TGraphCtrl *this)
Definition: graphctl.c:15
HWND hWnd
Definition: settings.c:17
void GraphCtrl_Resize(TGraphCtrl *this)
Definition: graphctl.c:539

Referenced by PerformancePageWndProc().

◆ GraphCtrl_Dispose()

void GraphCtrl_Dispose ( TGraphCtrl this)

Definition at line 98 of file graphctl.c.

99 {
100  int plot;
101 
102  for (plot = 0; plot < MAX_PLOTS; plot++)
103  DeleteObject(this->m_penPlot[plot]);
104 
105  /* just to be picky restore the bitmaps for the two memory dc's */
106  /* (these dc's are being destroyed so there shouldn't be any leaks) */
107 
108  if (this->m_bitmapOldGrid != NULL) SelectObject(this->m_dcGrid, this->m_bitmapOldGrid);
109  if (this->m_bitmapOldPlot != NULL) SelectObject(this->m_dcPlot, this->m_bitmapOldPlot);
110  if (this->m_bitmapGrid != NULL) DeleteObject(this->m_bitmapGrid);
111  if (this->m_bitmapPlot != NULL) DeleteObject(this->m_bitmapPlot);
112  if (this->m_dcGrid != NULL) DeleteDC(this->m_dcGrid);
113  if (this->m_dcPlot != NULL) DeleteDC(this->m_dcPlot);
114  if (this->m_brushBack != NULL) DeleteObject(this->m_brushBack);
115 }
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define MAX_PLOTS
Definition: graphctl.h:25
BOOL WINAPI DeleteDC(_In_ HDC)
#define NULL
Definition: types.h:112

Referenced by PerformancePageWndProc().

◆ GraphCtrl_DrawPoint()

void GraphCtrl_DrawPoint ( TGraphCtrl this)

Definition at line 453 of file graphctl.c.

454 {
455  /* this does the work of "scrolling" the plot to the left
456  * and appending a new data point all of the plotting is
457  * directed to the memory based bitmap associated with m_dcPlot
458  * the will subsequently be BitBlt'd to the client in Paint
459  */
460  int currX, prevX, currY, prevY;
461  HPEN oldPen;
462  RECT rectCleanUp;
463  int i;
464 
465  if (this->m_dcPlot != NULL)
466  {
467  /* shift the plot by BitBlt'ing it to itself
468  * note: the m_dcPlot covers the entire client
469  * but we only shift bitmap that is the size
470  * of the plot rectangle
471  * grab the right side of the plot (excluding m_nShiftPixels on the left)
472  * move this grabbed bitmap to the left by m_nShiftPixels
473  */
474  BitBlt(this->m_dcPlot, this->m_rectPlot.left, this->m_rectPlot.top + 1,
475  this->m_nPlotWidth, this->m_nPlotHeight, this->m_dcPlot,
476  this->m_rectPlot.left+this->m_nShiftPixels, this->m_rectPlot.top + 1,
477  SRCCOPY);
478 
479  /* establish a rectangle over the right side of plot */
480  /* which now needs to be cleaned up prior to adding the new point */
481  rectCleanUp = this->m_rectPlot;
482  rectCleanUp.left = rectCleanUp.right - this->m_nShiftPixels;
483 
484  /* fill the cleanup area with the background */
485  FillRect(this->m_dcPlot, &rectCleanUp, this->m_brushBack);
486 
487  /* draw the next line segment */
488  for (i = 0; i < MAX_PLOTS; i++)
489  {
490  /* grab the plotting pen */
491  oldPen = (HPEN)SelectObject(this->m_dcPlot, this->m_penPlot[i]);
492 
493  /* move to the previous point */
494  prevX = this->m_rectPlot.right-this->m_nPlotShiftPixels;
495  prevY = this->m_rectPlot.bottom -
496  (long)((this->m_dPreviousPosition[i] - this->m_dLowerLimit) * this->m_dVerticalFactor);
497  MoveToEx(this->m_dcPlot, prevX, prevY, NULL);
498 
499  /* draw to the current point */
500  currX = this->m_rectPlot.right-this->m_nHalfShiftPixels;
501  currY = this->m_rectPlot.bottom -
502  (long)((this->m_dCurrentPosition[i] - this->m_dLowerLimit) * this->m_dVerticalFactor);
503  LineTo(this->m_dcPlot, currX, currY);
504 
505  /* Restore the pen */
506  SelectObject(this->m_dcPlot, oldPen);
507 
508  /* if the data leaks over the upper or lower plot boundaries
509  * fill the upper and lower leakage with the background
510  * this will facilitate clipping on an as needed basis
511  * as opposed to always calling IntersectClipRect
512  */
513  if ((prevY <= this->m_rectPlot.top) || (currY <= this->m_rectPlot.top))
514  {
515  RECT rc;
516  rc.bottom = this->m_rectPlot.top + 1;
517  rc.left = prevX;
518  rc.right = currX + 1;
519  rc.top = this->m_rectClient.top;
520  FillRect(this->m_dcPlot, &rc, this->m_brushBack);
521  }
522  if ((prevY >= this->m_rectPlot.bottom) || (currY >= this->m_rectPlot.bottom))
523  {
524  RECT rc;
525  rc.bottom = this->m_rectClient.bottom + 1;
526  rc.left = prevX;
527  rc.right = currX + 1;
528  rc.top = this->m_rectPlot.bottom + 1;
529  /* RECT rc(prevX, m_rectPlot.bottom+1, currX+1, m_rectClient.bottom+1); */
530  FillRect(this->m_dcPlot, &rc, this->m_brushBack);
531  }
532 
533  /* store the current point for connection to the next point */
534  this->m_dPreviousPosition[i] = this->m_dCurrentPosition[i];
535  }
536  }
537 }
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
int m_nShiftPixels
Definition: graphctl.h:47
#define MAX_PLOTS
Definition: graphctl.h:25
int m_nPlotHeight
Definition: graphctl.h:66
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
int m_nPlotWidth
Definition: graphctl.h:67
RECT m_rectPlot
Definition: graphctl.h:87
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define long
Definition: qsort.c:33
#define NULL
Definition: types.h:112
LONG bottom
Definition: windef.h:309
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HDC m_dcPlot
Definition: graphctl.h:79
#define SRCCOPY
Definition: wingdi.h:333
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49

Referenced by GraphCtrl_AppendPoint(), and GraphCtrl_InvalidateCtrl().

◆ GraphCtrl_InvalidateCtrl()

void GraphCtrl_InvalidateCtrl ( TGraphCtrl this,
BOOL  bResize 
)

Definition at line 181 of file graphctl.c.

182 {
183  /* There is a lot of drawing going on here - particularly in terms of */
184  /* drawing the grid. Don't panic, this is all being drawn (only once) */
185  /* to a bitmap. The result is then BitBlt'd to the control whenever needed. */
186  int i;
187  int nCharacters;
188  //int nTopGridPix, nMidGridPix, nBottomGridPix;
189 
190  HPEN oldPen;
191  HPEN solidPen = CreatePen(PS_SOLID, 0, this->m_crGridColor);
192  /* HFONT axisFont, yUnitFont, oldFont; */
193  /* char strTemp[50]; */
194 
195  /* in case we haven't established the memory dc's */
196  /* CClientDC dc(this); */
197  HDC dc = GetDC(this->m_hParentWnd);
198 
199  /* if we don't have one yet, set up a memory dc for the grid */
200  if (this->m_dcGrid == NULL)
201  {
202  this->m_dcGrid = CreateCompatibleDC(dc);
203  this->m_bitmapGrid = CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
204  this->m_bitmapOldGrid = (HBITMAP)SelectObject(this->m_dcGrid, this->m_bitmapGrid);
205  }
206  else if(bResize)
207  {
208  // the size of the drawing area has changed
209  // so create a new bitmap of the appropriate size
210  if(this->m_bitmapGrid != NULL)
211  {
212  this->m_bitmapGrid = (HBITMAP)SelectObject(this->m_dcGrid, this->m_bitmapOldGrid);
213  DeleteObject(this->m_bitmapGrid);
214  this->m_bitmapGrid = CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
215  SelectObject(this->m_dcGrid, this->m_bitmapGrid);
216  }
217  }
218 
219  SetBkColor(this->m_dcGrid, this->m_crBackColor);
220 
221  /* fill the grid background */
222  FillRect(this->m_dcGrid, &this->m_rectClient, this->m_brushBack);
223 
224  /* draw the plot rectangle: */
225  /* determine how wide the y axis scaling values are */
226  nCharacters = abs((int)log10(fabs(this->m_dUpperLimit)));
227  nCharacters = max(nCharacters, abs((int)log10(fabs(this->m_dLowerLimit))));
228 
229  /* add the units digit, decimal point and a minus sign, and an extra space */
230  /* as well as the number of decimal places to display */
231  nCharacters = nCharacters + 4 + this->m_nYDecimals;
232 
233  /* adjust the plot rectangle dimensions */
234  /* assume 6 pixels per character (this may need to be adjusted) */
235  /* m_rectPlot.left = m_rectClient.left + 6*(nCharacters); */
236  this->m_rectPlot.left = this->m_rectClient.left;
237  this->m_nPlotWidth = this->m_rectPlot.right - this->m_rectPlot.left;/* m_rectPlot.Width(); */
238 
239  /* draw the plot rectangle */
240  oldPen = (HPEN)SelectObject(this->m_dcGrid, solidPen);
241  MoveToEx(this->m_dcGrid, this->m_rectPlot.left, this->m_rectPlot.top, NULL);
242  LineTo(this->m_dcGrid, this->m_rectPlot.right + 1, this->m_rectPlot.top);
243  LineTo(this->m_dcGrid, this->m_rectPlot.right + 1, this->m_rectPlot.bottom + 1);
244  LineTo(this->m_dcGrid, this->m_rectPlot.left, this->m_rectPlot.bottom + 1);
245  /* LineTo(m_dcGrid, m_rectPlot.left, m_rectPlot.top); */
246 
247  /* draw the horizontal axis */
248  for (i = this->m_rectPlot.top; i <= this->m_rectPlot.bottom; i += this->m_nGridYPixels)
249  {
250  MoveToEx(this->m_dcGrid, this->m_rectPlot.left, i, NULL);
251  LineTo(this->m_dcGrid, this->m_rectPlot.right, i);
252  }
253 
254  /* draw the vertical axis */
255  /* In order to keep grid position uniform when resizing, vertical axis should be */
256  /* drawn from right to left */
257  for (i = this->m_rectPlot.right - this->m_nGridOffsetPixels; i >= this->m_rectPlot.left; i -= this->m_nGridXPixels)
258  {
259  MoveToEx(this->m_dcGrid, i, this->m_rectPlot.bottom, NULL);
260  LineTo(this->m_dcGrid, i, this->m_rectPlot.top);
261  }
262 
263  SelectObject(this->m_dcGrid, oldPen);
264  DeleteObject(solidPen);
265 
266 #if 0
267  /* create some fonts (horizontal and vertical) */
268  /* use a height of 14 pixels and 300 weight */
269  /* (these may need to be adjusted depending on the display) */
270  axisFont = CreateFont (14, 0, 0, 0, 300,
271  FALSE, FALSE, 0, ANSI_CHARSET,
275  DEFAULT_PITCH|FF_SWISS, "Arial");
276  yUnitFont = CreateFont (14, 0, 900, 0, 300,
277  FALSE, FALSE, 0, ANSI_CHARSET,
281  DEFAULT_PITCH|FF_SWISS, "Arial");
282 
283  /* grab the horizontal font */
284  oldFont = (HFONT)SelectObject(m_dcGrid, axisFont);
285 
286  /* y max */
287  SetTextColor(m_dcGrid, m_crGridColor);
288  SetTextAlign(m_dcGrid, TA_RIGHT|TA_TOP);
289  sprintf(strTemp, "%.*lf", m_nYDecimals, m_dUpperLimit);
290  TextOut(m_dcGrid, m_rectPlot.left-4, m_rectPlot.top, strTemp, wcslen(strTemp));
291 
292  /* y min */
293  SetTextAlign(m_dcGrid, TA_RIGHT|TA_BASELINE);
294  sprintf(strTemp, "%.*lf", m_nYDecimals, m_dLowerLimit);
295  TextOut(m_dcGrid, m_rectPlot.left-4, m_rectPlot.bottom, strTemp, wcslen(strTemp));
296 
297  /* x min */
298  SetTextAlign(m_dcGrid, TA_LEFT|TA_TOP);
299  TextOut(m_dcGrid, m_rectPlot.left, m_rectPlot.bottom+4, "0", 1);
300 
301  /* x max */
302  SetTextAlign(m_dcGrid, TA_RIGHT|TA_TOP);
303  sprintf(strTemp, "%d", m_nPlotWidth/m_nShiftPixels);
304  TextOut(m_dcGrid, m_rectPlot.right, m_rectPlot.bottom+4, strTemp, wcslen(strTemp));
305 
306  /* x units */
307  SetTextAlign(m_dcGrid, TA_CENTER|TA_TOP);
308  TextOut(m_dcGrid, (m_rectPlot.left+m_rectPlot.right)/2,
309  m_rectPlot.bottom+4, m_strXUnitsString, wcslen(m_strXUnitsString));
310 
311  /* restore the font */
312  SelectObject(m_dcGrid, oldFont);
313 
314  /* y units */
315  oldFont = (HFONT)SelectObject(m_dcGrid, yUnitFont);
317  TextOut(m_dcGrid, (m_rectClient.left+m_rectPlot.left)/2,
318  (m_rectPlot.bottom+m_rectPlot.top)/2, m_strYUnitsString, wcslen(m_strYUnitsString));
319  SelectObject(m_dcGrid, oldFont);
320 #endif
321  /* at this point we are done filling the grid bitmap, */
322  /* no more drawing to this bitmap is needed until the settings are changed */
323 
324  /* if we don't have one yet, set up a memory dc for the plot */
325  if (this->m_dcPlot == NULL)
326  {
327  this->m_dcPlot = CreateCompatibleDC(dc);
328  this->m_bitmapPlot = CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
329  this->m_bitmapOldPlot = (HBITMAP)SelectObject(this->m_dcPlot, this->m_bitmapPlot);
330  }
331  else if(bResize)
332  {
333  // the size of the drawing area has changed
334  // so create a new bitmap of the appropriate size
335  if(this->m_bitmapPlot != NULL)
336  {
337  this->m_bitmapPlot = (HBITMAP)SelectObject(this->m_dcPlot, this->m_bitmapOldPlot);
338  DeleteObject(this->m_bitmapPlot);
339  this->m_bitmapPlot = CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
340  SelectObject(this->m_dcPlot, this->m_bitmapPlot);
341  GraphCtrl_DrawPoint(this);
342  }
343  }
344 
345  /* make sure the plot bitmap is cleared */
346  SetBkColor(this->m_dcPlot, this->m_crBackColor);
347  FillRect(this->m_dcPlot, &this->m_rectClient, this->m_brushBack);
348 
349  /* finally, force the plot area to redraw */
350  InvalidateRect(this->m_hParentWnd, &this->m_rectClient, TRUE);
351  ReleaseDC(this->m_hParentWnd, dc);
352 }
#define abs(i)
Definition: fconv.c:206
#define max(a, b)
Definition: svc.c:63
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
#define DEFAULT_QUALITY
Definition: wingdi.h:436
HDC WINAPI GetDC(_In_opt_ HWND)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
#define TRUE
Definition: types.h:120
static HDC
Definition: imagelist.c:92
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
int m_nGridOffsetPixels
Definition: graphctl.h:63
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define TA_LEFT
Definition: wingdi.h:932
LONG left
Definition: windef.h:306
UINT WINAPI SetTextAlign(_In_ HDC, _In_ UINT)
Definition: text.c:876
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:999
#define sprintf(buf, format,...)
Definition: sprintf.c:55
void GraphCtrl_DrawPoint(TGraphCtrl *this)
Definition: graphctl.c:453
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
#define PS_SOLID
Definition: wingdi.h:586
#define TA_TOP
Definition: wingdi.h:930
#define FALSE
Definition: types.h:117
#define TA_BASELINE
Definition: wingdi.h:928
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:426
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define CreateFont
Definition: wingdi.h:4443
#define TA_RIGHT
Definition: wingdi.h:933
#define DEFAULT_PITCH
Definition: wingdi.h:443
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
_STLP_DECLSPEC complex< float > _STLP_CALL log10(const complex< float > &)
Definition: complex.cpp:230
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:415
int m_nGridXPixels
Definition: graphctl.h:68
_Check_return_ _CRT_JIT_INTRINSIC double __cdecl fabs(_In_ double x)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:911
RECT m_rectPlot
Definition: graphctl.h:87
#define FF_SWISS
Definition: wingdi.h:452
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define NULL
Definition: types.h:112
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define TextOut
Definition: wingdi.h:4483
LONG bottom
Definition: windef.h:309
static const WCHAR dc[]
static HBITMAP
Definition: button.c:44
#define TA_CENTER
Definition: wingdi.h:931
#define ANSI_CHARSET
Definition: wingdi.h:383
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
int m_nGridYPixels
Definition: graphctl.h:69

Referenced by GraphCtrl_SetBackgroundColor(), GraphCtrl_SetGridColor(), GraphCtrl_SetPlotColor(), GraphCtrl_SetRange(), and GraphCtrl_WndProc().

◆ GraphCtrl_Paint()

void GraphCtrl_Paint ( TGraphCtrl this,
HWND  hWnd,
HDC  dc 
)

Definition at line 372 of file graphctl.c.

373 {
374  HDC memDC;
375  HBITMAP memBitmap;
376  HBITMAP oldBitmap; /* bitmap originally found in CMemDC */
377 
378 /* RECT rcClient; */
379 /* GetClientRect(hWnd, &rcClient); */
380 /* FillSolidRect(dc, &rcClient, RGB(255, 0, 255)); */
381 /* m_nClientWidth = rcClient.right - rcClient.left; */
382 /* m_nClientHeight = rcClient.bottom - rcClient.top; */
383 
384  /* no real plotting work is performed here, */
385  /* just putting the existing bitmaps on the client */
386 
387  /* to avoid flicker, establish a memory dc, draw to it */
388  /* and then BitBlt it to the client */
389  memDC = CreateCompatibleDC(dc);
390  memBitmap = (HBITMAP)CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
391  oldBitmap = (HBITMAP)SelectObject(memDC, memBitmap);
392 
393  if (memDC != NULL)
394  {
395  /* first drop the grid on the memory dc */
396  BitBlt(memDC, 0, 0, this->m_nClientWidth, this->m_nClientHeight, this->m_dcGrid, 0, 0, SRCCOPY);
397  /* now add the plot on top as a "pattern" via SRCPAINT. */
398  /* works well with dark background and a light plot */
399  BitBlt(memDC, 0, 0, this->m_nClientWidth, this->m_nClientHeight, this->m_dcPlot, 0, 0, SRCPAINT); /* SRCPAINT */
400  /* finally send the result to the display */
401  BitBlt(dc, 0, 0, this->m_nClientWidth, this->m_nClientHeight, memDC, 0, 0, SRCCOPY);
402  }
403  SelectObject(memDC, oldBitmap);
404  DeleteObject(memBitmap);
405  DeleteDC(memDC);
406 }
#define SRCPAINT
Definition: wingdi.h:334
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI DeleteDC(_In_ HDC)
#define NULL
Definition: types.h:112
static const WCHAR dc[]
static HBITMAP
Definition: button.c:44
#define SRCCOPY
Definition: wingdi.h:333
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49

Referenced by GraphCtrl_WndProc().

◆ GraphCtrl_Reset()

void GraphCtrl_Reset ( TGraphCtrl this)

◆ GraphCtrl_Resize()

void GraphCtrl_Resize ( TGraphCtrl this)

Definition at line 539 of file graphctl.c.

540 {
541  /* NOTE: Resize automatically gets called during the setup of the control */
542  GetClientRect(this->m_hWnd, &this->m_rectClient);
543 
544  /* set some member variables to avoid multiple function calls */
545  this->m_nClientHeight = this->m_rectClient.bottom - this->m_rectClient.top;/* m_rectClient.Height(); */
546  this->m_nClientWidth = this->m_rectClient.right - this->m_rectClient.left;/* m_rectClient.Width(); */
547 
548  /* the "left" coordinate and "width" will be modified in */
549  /* InvalidateCtrl to be based on the width of the y axis scaling */
550 #if 0
551  this->m_rectPlot.left = 20;
552  this->m_rectPlot.top = 10;
553  this->m_rectPlot.right = this->m_rectClient.right-10;
554  this->m_rectPlot.bottom = this->m_rectClient.bottom-25;
555 #else
556  this->m_rectPlot.left = 0;
557  this->m_rectPlot.top = -1;
558  this->m_rectPlot.right = this->m_rectClient.right;
559  this->m_rectPlot.bottom = this->m_rectClient.bottom;
560 #endif
561 
562  /* set some member variables to avoid multiple function calls */
563  this->m_nPlotHeight = this->m_rectPlot.bottom - this->m_rectPlot.top;/* m_rectPlot.Height(); */
564  this->m_nPlotWidth = this->m_rectPlot.right - this->m_rectPlot.left;/* m_rectPlot.Width(); */
565 
566  /* set the scaling factor for now, this can be adjusted */
567  /* in the SetRange functions */
568  this->m_dVerticalFactor = (double)this->m_nPlotHeight / this->m_dRange;
569 }
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:80
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)

Referenced by GraphCtrl_Create(), and GraphCtrl_WndProc().

◆ GraphCtrl_SetBackgroundColor()

void GraphCtrl_SetBackgroundColor ( TGraphCtrl this,
COLORREF  color 
)

Definition at line 172 of file graphctl.c.

173 {
174  this->m_crBackColor = color;
175  DeleteObject(this->m_brushBack);
176  this->m_brushBack = CreateSolidBrush(this->m_crBackColor);
177  /* clear out the existing garbage, re-start with a clean plot */
179 }
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define FALSE
Definition: types.h:117
GLuint color
Definition: glext.h:6243
void GraphCtrl_InvalidateCtrl(TGraphCtrl *this, BOOL bResize)
Definition: graphctl.c:181
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)

Referenced by PerformancePageWndProc().

◆ GraphCtrl_SetGridColor()

void GraphCtrl_SetGridColor ( TGraphCtrl this,
COLORREF  color 
)

Definition at line 156 of file graphctl.c.

157 {
158  this->m_crGridColor = color;
159  /* clear out the existing garbage, re-start with a clean plot */
161 }
#define FALSE
Definition: types.h:117
GLuint color
Definition: glext.h:6243
void GraphCtrl_InvalidateCtrl(TGraphCtrl *this, BOOL bResize)
Definition: graphctl.c:181

Referenced by PerformancePageWndProc().

◆ GraphCtrl_SetPlotColor()

void GraphCtrl_SetPlotColor ( TGraphCtrl this,
int  plot,
COLORREF  color 
)

Definition at line 163 of file graphctl.c.

164 {
165  this->m_crPlotColor[plot] = color;
166  DeleteObject(this->m_penPlot[plot]);
167  this->m_penPlot[plot] = CreatePen(PS_SOLID, 0, this->m_crPlotColor[plot]);
168  /* clear out the existing garbage, re-start with a clean plot */
170 }
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define PS_SOLID
Definition: wingdi.h:586
#define FALSE
Definition: types.h:117
GLuint color
Definition: glext.h:6243
void GraphCtrl_InvalidateCtrl(TGraphCtrl *this, BOOL bResize)
Definition: graphctl.c:181

Referenced by PerformancePageWndProc().

◆ GraphCtrl_SetRange()

void GraphCtrl_SetRange ( TGraphCtrl this,
double  dLower,
double  dUpper,
int  nDecimalPlaces 
)

Definition at line 128 of file graphctl.c.

129 {
130  /* ASSERT(dUpper > dLower); */
131  this->m_dLowerLimit = dLower;
132  this->m_dUpperLimit = dUpper;
133  this->m_nYDecimals = nDecimalPlaces;
134  this->m_dRange = this->m_dUpperLimit - this->m_dLowerLimit;
135  this->m_dVerticalFactor = (double)this->m_nPlotHeight / this->m_dRange;
136  /* clear out the existing garbage, re-start with a clean plot */
138 }
#define FALSE
Definition: types.h:117
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:80
void GraphCtrl_InvalidateCtrl(TGraphCtrl *this, BOOL bResize)
Definition: graphctl.c:181

Referenced by PerformancePageWndProc().

◆ GraphCtrl_ShiftGrid()

void GraphCtrl_ShiftGrid ( TGraphCtrl this)

Definition at line 408 of file graphctl.c.

409 {
410  RECT rectCleanUp;
411  HPEN oldPen, solidPen;
412  int i;
413 
414  if (this->m_dcGrid == NULL)
415  return;
416 
417  solidPen = CreatePen(PS_SOLID, 0, this->m_crGridColor);
418 
419  /* Scroll the grid left: BitBlt it to itself */
420  BitBlt(this->m_dcGrid, this->m_rectPlot.left, this->m_rectPlot.top + 1,
421  this->m_nPlotWidth, this->m_nPlotHeight,
422  this->m_dcGrid, this->m_rectPlot.left + this->m_nShiftPixels, this->m_rectPlot.top + 1,
423  SRCCOPY);
424 
425  /* Set shift pixels */
426  this->m_nGridOffsetPixels = (this->m_nGridOffsetPixels + this->m_nShiftPixels) % this->m_nGridXPixels;
427 
428  /* Construct a rect in which needs update */
429  rectCleanUp = this->m_rectPlot;
430  rectCleanUp.left = rectCleanUp.right - this->m_nShiftPixels;
431 
432  /* Fill the cleanup area with the background */
433  FillRect(this->m_dcGrid, &rectCleanUp, this->m_brushBack);
434 
435  /* Draw the plot rectangle */
436  oldPen = (HPEN)SelectObject(this->m_dcGrid, solidPen);
437 
438  /* Redraw horizontal axis */
439  for (i = rectCleanUp.top; i < rectCleanUp.bottom; i += this->m_nGridYPixels)
440  {
441  MoveToEx(this->m_dcGrid, rectCleanUp.left, i, NULL);
442  LineTo(this->m_dcGrid, rectCleanUp.right, i);
443  }
444 
445  /* Redraw scrolled vertical axis */
446  MoveToEx(this->m_dcGrid, rectCleanUp.right - this->m_nGridOffsetPixels, rectCleanUp.top, NULL);
447  LineTo(this->m_dcGrid, rectCleanUp.right - this->m_nGridOffsetPixels, rectCleanUp.bottom);
448 
449  SelectObject(this->m_dcGrid, oldPen);
450  DeleteObject(solidPen);
451 }
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
int m_nGridOffsetPixels
Definition: graphctl.h:63
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
int m_nShiftPixels
Definition: graphctl.h:47
int m_nPlotHeight
Definition: graphctl.h:66
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HDC m_dcGrid
Definition: graphctl.h:78
#define PS_SOLID
Definition: wingdi.h:586
int m_nPlotWidth
Definition: graphctl.h:67
RECT m_rectPlot
Definition: graphctl.h:87
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define NULL
Definition: types.h:112
LONG bottom
Definition: windef.h:309
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define SRCCOPY
Definition: wingdi.h:333
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49

Referenced by GraphCtrl_AppendPoint().

◆ GraphCtrl_WndProc()

INT_PTR CALLBACK GraphCtrl_WndProc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 586 of file graphctl.c.

587 {
588  RECT rcClient;
589  HDC hdc;
590  PAINTSTRUCT ps;
591 
592  switch (message)
593  {
594  case WM_ERASEBKGND:
595  return TRUE;
596  /*
597  * Filter out mouse & keyboard messages
598  */
599  /* case WM_APPCOMMAND: */
600  case WM_CAPTURECHANGED:
601  case WM_LBUTTONDBLCLK:
602  case WM_LBUTTONDOWN:
603  case WM_LBUTTONUP:
604  case WM_MBUTTONDBLCLK:
605  case WM_MBUTTONDOWN:
606  case WM_MBUTTONUP:
607  case WM_MOUSEACTIVATE:
608  case WM_MOUSEHOVER:
609  case WM_MOUSELEAVE:
610  case WM_MOUSEMOVE:
611  /* case WM_MOUSEWHEEL: */
612  case WM_NCHITTEST:
613  case WM_NCLBUTTONDBLCLK:
614  case WM_NCLBUTTONDOWN:
615  case WM_NCLBUTTONUP:
616  case WM_NCMBUTTONDBLCLK:
617  case WM_NCMBUTTONDOWN:
618  case WM_NCMBUTTONUP:
619  /* case WM_NCMOUSEHOVER: */
620  /* case WM_NCMOUSELEAVE: */
621  case WM_NCMOUSEMOVE:
622  case WM_NCRBUTTONDBLCLK:
623  case WM_NCRBUTTONDOWN:
624  case WM_NCRBUTTONUP:
625  /* case WM_NCXBUTTONDBLCLK: */
626  /* case WM_NCXBUTTONDOWN: */
627  /* case WM_NCXBUTTONUP: */
628  case WM_RBUTTONDBLCLK:
629  case WM_RBUTTONDOWN:
630  case WM_RBUTTONUP:
631  /* case WM_XBUTTONDBLCLK: */
632  /* case WM_XBUTTONDOWN: */
633  /* case WM_XBUTTONUP: */
634  case WM_ACTIVATE:
635  case WM_CHAR:
636  case WM_DEADCHAR:
637  case WM_GETHOTKEY:
638  case WM_HOTKEY:
639  case WM_KEYDOWN:
640  case WM_KEYUP:
641  case WM_KILLFOCUS:
642  case WM_SETFOCUS:
643  case WM_SETHOTKEY:
644  case WM_SYSCHAR:
645  case WM_SYSDEADCHAR:
646  case WM_SYSKEYDOWN:
647  case WM_SYSKEYUP:
648  return 0;
649 
650  case WM_NCCALCSIZE:
651  return 0;
652 
653  case WM_SIZE:
655  {
658  }
660  {
663  }
664  return 0;
665 
666  case WM_PAINT:
667  hdc = BeginPaint(hWnd, &ps);
668  GetClientRect(hWnd, &rcClient);
673  EndPaint(hWnd, &ps);
674  return 0;
675  }
676 
677  /*
678  * We pass on all non-handled messages
679  */
681 }
#define WM_MBUTTONUP
Definition: winuser.h:1770
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1679
#define WM_SETHOTKEY
Definition: winuser.h:1639
Definition: tftpd.h:59
#define WM_NCMBUTTONDBLCLK
Definition: winuser.h:1687
#define WM_CHAR
Definition: winuser.h:1704
#define WM_LBUTTONDOWN
Definition: winuser.h:1763
#define TRUE
Definition: types.h:120
#define WM_GETHOTKEY
Definition: winuser.h:1640
#define WM_HOTKEY
Definition: winuser.h:1866
#define WM_NCCALCSIZE
Definition: winuser.h:1672
#define WM_MOUSEHOVER
Definition: commctrl.h:4974
#define WM_CAPTURECHANGED
Definition: winuser.h:1795
static HDC
Definition: imagelist.c:92
TGraphCtrl PerformancePageCpuUsageHistoryGraph
Definition: perfpage.c:28
HWND hWnd
Definition: settings.c:17
#define WM_NCRBUTTONDOWN
Definition: winuser.h:1682
#define WM_NCHITTEST
Definition: winuser.h:1673
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
WPARAM wParam
Definition: combotst.c:138
#define WM_NCRBUTTONDBLCLK
Definition: winuser.h:1684
#define WM_NCRBUTTONUP
Definition: winuser.h:1683
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define WM_MOUSELEAVE
Definition: commctrl.h:4975
#define WM_SYSCHAR
Definition: winuser.h:1708
#define WM_KEYDOWN
Definition: winuser.h:1702
#define WM_MOUSEACTIVATE
Definition: winuser.h:1624
WNDPROC OldGraphCtrlWndProc
Definition: graphctl.c:13
#define WM_RBUTTONDOWN
Definition: winuser.h:1766
#define WM_DEADCHAR
Definition: winuser.h:1705
#define WM_KILLFOCUS
Definition: winuser.h:1601
#define WM_SIZE
Definition: winuser.h:1598
void GraphCtrl_InvalidateCtrl(TGraphCtrl *this, BOOL bResize)
Definition: graphctl.c:181
TGraphCtrl PerformancePageMemUsageHistoryGraph
Definition: perfpage.c:29
#define WM_KEYUP
Definition: winuser.h:1703
#define WM_RBUTTONUP
Definition: winuser.h:1767
#define WM_PAINT
Definition: winuser.h:1607
HDC hdc
Definition: main.c:9
#define WM_NCMBUTTONUP
Definition: winuser.h:1686
void GraphCtrl_Paint(TGraphCtrl *this, HWND hWnd, HDC dc)
Definition: graphctl.c:372
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1765
#define WM_MBUTTONDBLCLK
Definition: winuser.h:1771
void GraphCtrl_Resize(TGraphCtrl *this)
Definition: graphctl.c:539
#define WM_NCMBUTTONDOWN
Definition: winuser.h:1685
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_ACTIVATE
Definition: winuser.h:1599
#define WM_SYSDEADCHAR
Definition: winuser.h:1709
#define WM_SYSKEYUP
Definition: winuser.h:1707
#define WM_LBUTTONUP
Definition: winuser.h:1764
#define WM_MBUTTONDOWN
Definition: winuser.h:1769
HWND hPerformancePageMemUsageHistoryGraph
Definition: perfpage.c:35
#define WM_MOUSEMOVE
Definition: winuser.h:1762
#define WM_RBUTTONDBLCLK
Definition: winuser.h:1768
#define WM_SYSKEYDOWN
Definition: winuser.h:1706
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_NCLBUTTONUP
Definition: winuser.h:1680
#define WM_ERASEBKGND
Definition: winuser.h:1612
#define WM_SETFOCUS
Definition: winuser.h:1600
LPARAM lParam
Definition: combotst.c:139
HWND hPerformancePageCpuUsageHistoryGraph
Definition: perfpage.c:34
#define WM_NCMOUSEMOVE
Definition: winuser.h:1678
#define WM_NCLBUTTONDBLCLK
Definition: winuser.h:1681

Referenced by PerformancePageWndProc().

Variable Documentation

◆ OldGraphCtrlWndProc

WNDPROC OldGraphCtrlWndProc

Definition at line 13 of file graphctl.c.

Referenced by GraphCtrl_WndProc(), and PerformancePageWndProc().