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

操作系统开发

开发平台:

Visual C++

  1. // MemPage2.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "OSDemo.h"
  5. #include "MemPage2.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMemPage2 dialog
  13. CMemPage2::CMemPage2(CWnd* pParent /*=NULL*/)
  14. : CDialog(CMemPage2::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CMemPage2)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. }
  20. void CMemPage2::DoDataExchange(CDataExchange* pDX)
  21. {
  22. CDialog::DoDataExchange(pDX);
  23. //{{AFX_DATA_MAP(CMemPage2)
  24. DDX_Control(pDX, IDC_DRAW, m_Draw);
  25. //}}AFX_DATA_MAP
  26. }
  27. BEGIN_MESSAGE_MAP(CMemPage2, CDialog)
  28. //{{AFX_MSG_MAP(CMemPage2)
  29. ON_WM_PAINT()
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CMemPage2 message handlers
  34. BOOL CMemPage2::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 CMemPage2::OnPaint() 
  43. {
  44. CPaintDC dc(this); // device context for painting
  45. //InitGrah();
  46. //if(bDraw) 
  47. // DrawPotLine();
  48.     if(graphComplete)
  49. {
  50.            CDC* DrawDC=m_Draw.GetDC();
  51.     testGraph->DrawGraph(DrawDC);
  52. }
  53. // TODO: Add your message handler code here
  54. // Do not call CDialog::OnPaint() for painting messages
  55. }
  56. void CMemPage2::InitGrah()
  57. {
  58.     int i;
  59. CString crText;
  60. CClientDC dc(GetDlgItem(IDC_DRAW));
  61. CPen lPen(PS_SOLID,2,RGB(200,0,50));
  62. CPen *lOldPen=dc.SelectObject(&lPen);
  63. dc.MoveTo(20,0);
  64. dc.LineTo(20,260);
  65.     dc.LineTo(550,260);
  66. dc.MoveTo(550,260);
  67. CPen lDraw(PS_SOLID,1,RGB(200,0,50));
  68.     
  69. dc.SelectObject(&lDraw);
  70. for (i=1;i<=10;i++)
  71. {
  72. crText.Format("%d",i*10);
  73. dc.MoveTo(17,260-25*i);
  74. dc.LineTo(23,260-25*i);
  75.         DrawText(0,255-25*i,crText);
  76. }
  77.     for (i=4;i<=32;i++)
  78. {
  79. crText.Format("%d",i);
  80. dc.MoveTo(20+18*(i-3),257);
  81. dc.LineTo(20+18*(i-3),263);
  82. DrawText(20+18*(i-3)-4,265,crText);
  83. }
  84. DrawText(480,235,"物理内存页数");
  85. DrawText(30,0,"命中率");
  86. dc.SelectObject(lOldPen);
  87. }
  88. void CMemPage2::DrawText(int x, int y, CString Text)
  89. {
  90.      CClientDC dc(GetDlgItem(IDC_DRAW)); 
  91. CFont m_TextFont;
  92. m_TextFont.CreateFont(12, 0, 0, 0, FW_NORMAL, 0, FALSE, FALSE,
  93. DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
  94. FIXED_PITCH | FF_ROMAN, "宋体");
  95. TEXTMETRIC tm;
  96. dc.GetTextMetrics(&tm);
  97. CFont* oldFont = dc.SelectObject(&m_TextFont);
  98. dc.SetBkMode(TRANSPARENT);
  99. COLORREF oldColor = dc.SetTextColor(RGB(0,0,0));
  100.     dc.TextOut(x,y,Text);
  101. }
  102. void CMemPage2::Draw3dLine()
  103. {
  104.     int i;
  105. testGraph = new CGraph(LINE_GRAPH_3D);
  106. testGraph->SetGraphTitle("详细命中情况图");
  107. testGraph->SetXAxisAlignment(0);
  108. testGraph->SetXAxisLabel("Memory Page Size (KB)");
  109. testGraph->SetYAxisLabel("Hit rate");
  110. testGraph->Set3DDepthRatio(.1);
  111. testGraph->Set3DLineBase(0,0);
  112.     for (i=0;i<potFIFO.GetSize();i++)
  113. {
  114. CGraphSeries* series1 = new CGraphSeries();
  115. CString AxisStr;
  116. AxisStr.Format("%d",i+4);
  117. series1->SetLabel(AxisStr);
  118. series1->SetData(0, potFIFO[i].rate);
  119. series1->SetData(1, potOPT[i].rate);
  120. series1->SetData(2, potLRU[i].rate);
  121. testGraph->AddSeries(series1);
  122. if (potFIFO.GetSize()>20) i++;
  123. }
  124. testGraph->SetTickLimits(0, 100, 10);
  125. testGraph->SetColor(0, RED);
  126. testGraph->SetColor(1, FOREST_GREEN);
  127. testGraph->SetColor(2, SKY_BLUE);
  128. //set up legend
  129. testGraph->SetLegend(0, "FIFO");
  130. testGraph->SetLegend(1, "OPT");
  131. testGraph->SetLegend(2, "LRU");
  132. graphComplete = TRUE;
  133. Invalidate(TRUE);
  134. }