MemPage1.cpp
上传用户:tianjwyx
上传日期:2007-01-13
资源大小:813k
文件大小:6k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. // MemPage1.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "OSDemo.h"
  5. #include "MemPage1.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMemPage1 dialog
  13. CMemPage1::CMemPage1(CWnd* pParent /*=NULL*/)
  14. : CDialog(CMemPage1::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CMemPage1)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. }
  20. void CMemPage1::DoDataExchange(CDataExchange* pDX)
  21. {
  22. CDialog::DoDataExchange(pDX);
  23. //{{AFX_DATA_MAP(CMemPage1)
  24. DDX_Control(pDX, IDC_DRAW, m_Draw);
  25. //}}AFX_DATA_MAP
  26. }
  27. BEGIN_MESSAGE_MAP(CMemPage1, CDialog)
  28. //{{AFX_MSG_MAP(CMemPage1)
  29. ON_WM_PAINT()
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CMemPage1 message handlers
  34. BOOL CMemPage1::OnInitDialog() 
  35. {
  36. CDialog::OnInitDialog();
  37. // TODO: Add extra initialization here
  38. bDraw=false;
  39. return TRUE;  // return TRUE unless you set the focus to a control
  40.               // EXCEPTION: OCX Property Pages should return FALSE
  41. }
  42. void CMemPage1::OnPaint() 
  43. {
  44. CPaintDC dc(this); // device context for painting
  45. InitGrah();
  46. if(bDraw) 
  47. //DrawPotLine();
  48.         DrawBar();
  49. }
  50. void CMemPage1::InitGrah()
  51. {
  52.     int i;
  53. CString crText;
  54. CClientDC dc(GetDlgItem(IDC_DRAW));
  55. CPen lPen(PS_SOLID,2,RGB(200,0,50));
  56. CPen *lOldPen=dc.SelectObject(&lPen);
  57. CBrush blackBrush;
  58.  blackBrush.CreateSolidBrush(RGB(0,0,0));
  59. dc.MoveTo(20,0);
  60. dc.LineTo(20,260);
  61.     dc.LineTo(550,260);
  62. dc.MoveTo(550,260);
  63. CPen lDraw(PS_SOLID,1,RGB(200,0,50));
  64.     
  65. dc.SelectObject(&lDraw);
  66. for (i=1;i<=10;i++)
  67. {
  68. crText.Format("%d",i*10);
  69. dc.MoveTo(17,260-25*i);
  70. dc.LineTo(23,260-25*i);
  71.         DrawText(0,255-25*i,crText);
  72. }
  73.     for (i=0;i<=3;i++)
  74. {
  75. crText.Format("%dK",(int)pow(2,i));
  76. dc.MoveTo(90+100*i,257);
  77. dc.LineTo(90+100*i,263);
  78. DrawText(85+100*i,265,crText);
  79. }
  80. DrawText(500,235,"页面大小");
  81. DrawText(30,0,"命中率");
  82. dc.SelectObject(lOldPen);
  83. CBrush ShowBrush;
  84. CRect rect1(500,80,510,90);
  85. CRect rect2(500,100,510,110);
  86. CRect rect3(500,120,510,130);
  87. ShowBrush.CreateSolidBrush(RGB(200,0,200));
  88. dc.FillRect(&rect1,&ShowBrush);
  89. ShowBrush.CreateSolidBrush(RGB(100,0,200));
  90. dc.FillRect(&rect2,&ShowBrush);
  91.     ShowBrush.CreateSolidBrush(RGB(100,135,100));
  92. dc.FillRect(&rect3,&ShowBrush);
  93. dc.FrameRect(&rect1,&blackBrush);
  94. dc.FrameRect(&rect2,&blackBrush);
  95. dc.FrameRect(&rect3,&blackBrush);
  96.     DrawText(520,78,"FIFO");
  97. DrawText(520,98,"OPT");
  98. DrawText(520,118,"LRU");
  99. }
  100. //DEL void CMemPage1::DrawPotLine()
  101. //DEL {
  102. //DEL      int i;
  103. //DEL   CClientDC dc(GetDlgItem(IDC_DRAW)); 
  104. //DEL   CPen blackPen(PS_SOLID,1,RGB(0,0,0));
  105. //DEL   for (i=0;i<4;i++)
  106. //DEL   {
  107. //DEL   CPen Pen(PS_SOLID,1,RGB(200,0,200));
  108. //DEL   dc.SelectObject(&Pen);
  109. //DEL   if (i>0)
  110. //DEL   {
  111. //DEL   dc.MoveTo(20+60*(int)pow(2,i-1),260-potFIFO[i-1].rate*25/10);
  112. //DEL   dc.LineTo(20+60*(int)pow(2,i),260-potFIFO[i].rate*25/10);
  113. //DEL   }
  114. //DEL          dc.Ellipse(17+60*pow(2,i),257-potFIFO[i].rate*25/10,23+60*pow(2,i),263-potFIFO[i].rate*25/10);
  115. //DEL   }
  116. //DEL   for (i=0;i<4;i++)
  117. //DEL   {
  118. //DEL   CPen Pen(PS_SOLID,1,RGB(100,0,200));
  119. //DEL   dc.SelectObject(&Pen);
  120. //DEL  if (i>0)
  121. //DEL   {
  122. //DEL   dc.MoveTo(20+60*(int)pow(2,i-1),260-potOPT[i-1].rate*25/10);
  123. //DEL   dc.LineTo(20+60*(int)pow(2,i),260-potOPT[i].rate*25/10);
  124. //DEL   }
  125. //DEL       dc.Ellipse(17+60*pow(2,i),257-potOPT[i].rate*25/10,23+60*pow(2,i),263-potOPT[i].rate*25/10);
  126. //DEL   }
  127. //DEL   for (i=0;i<4;i++)
  128. //DEL   {
  129. //DEL   CPen Pen(PS_SOLID,1,RGB(100,135,100));
  130. //DEL   dc.SelectObject(&Pen);
  131. //DEL  if (i>0)
  132. //DEL   {
  133. //DEL   dc.MoveTo(20+60*(int)pow(2,i-1),260-potLRU[i-1].rate*25/10);
  134. //DEL   dc.LineTo(20+60*(int)pow(2,i),260-potLRU[i].rate*25/10);
  135. //DEL   }
  136. //DEL          dc.Ellipse(17+60*pow(2,i),257-potLRU[i].rate*25/10,23+60*pow(2,i),263-potLRU[i].rate*25/10);
  137. //DEL   }
  138. //DEL }
  139. void CMemPage1::DrawText(int x, int y, CString Text)
  140. {
  141.      CClientDC dc(GetDlgItem(IDC_DRAW)); 
  142. CFont m_TextFont;
  143. m_TextFont.CreateFont(12, 0, 0, 0, FW_NORMAL, 0, FALSE, FALSE,
  144. DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
  145. FIXED_PITCH | FF_ROMAN, "宋体");
  146. TEXTMETRIC tm;
  147. dc.GetTextMetrics(&tm);
  148. CFont* oldFont = dc.SelectObject(&m_TextFont);
  149. dc.SetBkMode(TRANSPARENT);
  150. COLORREF oldColor = dc.SetTextColor(RGB(0,0,0));
  151.     dc.TextOut(x,y,Text);
  152. }
  153. void CMemPage1::DrawBar()
  154. {
  155.     int i;
  156. CString RateStr;
  157.  CClientDC dc(GetDlgItem(IDC_DRAW)); 
  158.  CPen blackPen(PS_SOLID,1,RGB(0,0,0));
  159.  CBrush blackBrush;
  160.  blackBrush.CreateSolidBrush(RGB(0,0,0));
  161.  for (i=0;i<4;i++)
  162.  {
  163.  CPen Pen(PS_SOLID,1,RGB(0,0,0));
  164.  CBrush FIFOBrush;
  165.  FIFOBrush.CreateSolidBrush(RGB(200,0,200));
  166.          dc.SetBkMode(RGB(200,0,200));
  167.  dc.SelectObject(&Pen);
  168.  CRect FIFOBar(60+100*i,257-potFIFO[i].rate*25/10,80+100*i,260);
  169.  RateStr.Format("%d%%",potFIFO[i].rate);
  170.  dc.Rectangle(&FIFOBar);
  171.  dc.FillRect(&FIFOBar,&FIFOBrush);
  172.  dc.FrameRect(&FIFOBar,&blackBrush);
  173.  DrawText(60+100*i,240-potFIFO[i].rate*25/10,RateStr);
  174.  }
  175.  for (i=0;i<4;i++)
  176.  {
  177.  CPen Pen(PS_SOLID,1,RGB(0,0,0));
  178.  CBrush OPTBrush;
  179.  OPTBrush.CreateSolidBrush(RGB(100,0,200));
  180.          dc.SetBkMode(RGB(200,0,200));
  181.  dc.SelectObject(&Pen);
  182.  CRect OPTBar(85+100*i,257-potOPT[i].rate*25/10,105+100*i,260);
  183.  RateStr.Format("%d%%",potOPT[i].rate);
  184.  dc.Rectangle(&OPTBar);
  185.  dc.FillRect(&OPTBar,&OPTBrush);
  186.  dc.FrameRect(&OPTBar,&blackBrush);
  187.  DrawText(85+100*i,240-potOPT[i].rate*25/10,RateStr);
  188.     
  189.  }
  190.  for (i=0;i<4;i++)
  191.  {
  192.  
  193.  CPen Pen(PS_SOLID,1,RGB(0,0,0));
  194.  CBrush LRUBrush;
  195.  LRUBrush.CreateSolidBrush(RGB(100,135,100));
  196.          dc.SetBkMode(RGB(200,0,200));
  197.  dc.SelectObject(&Pen);
  198.  CRect LRUBar(110+100*i,257-potLRU[i].rate*25/10,130+100*i,260);
  199.  RateStr.Format("%d%%",potLRU[i].rate);
  200.  dc.Rectangle(&LRUBar);
  201.  dc.FillRect(&LRUBar,&LRUBrush);
  202.  dc.FrameRect(&LRUBar,&blackBrush);
  203.  DrawText(110+100*i,240-potLRU[i].rate*25/10,RateStr);
  204.  }
  205. }