AmazeView.cpp
上传用户:jygk2008
上传日期:2007-04-06
资源大小:18k
文件大小:4k
源码类别:

系统/网络安全

开发平台:

Visual C++

  1. // AmazeView.cpp : implementation of the CAmazeView class
  2. //
  3. #include "stdafx.h"
  4. #include "Amaze.h"
  5. #include "AmazeDoc.h"
  6. #include "AmazeView.h"
  7. #include "Setup.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CAmazeView
  15. IMPLEMENT_DYNCREATE(CAmazeView, CScrollView)
  16. BEGIN_MESSAGE_MAP(CAmazeView, CScrollView)
  17. //{{AFX_MSG_MAP(CAmazeView)
  18. ON_COMMAND(IDC_NEW, OnNew)
  19. ON_COMMAND(IDC_DIS, OnDis)
  20. ON_UPDATE_COMMAND_UI(IDC_DIS, OnUpdateDis)
  21. ON_COMMAND(IDC_WIDTH, OnWidth)
  22. ON_COMMAND(IDC_HEIGHT, OnHeight)
  23. //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CAmazeView construction/destruction
  27. CAmazeView::CAmazeView()
  28. {
  29. // TODO: add construction code here
  30. m_bDis = false;
  31. }
  32. CAmazeView::~CAmazeView()
  33. {
  34. }
  35. BOOL CAmazeView::PreCreateWindow(CREATESTRUCT& cs)
  36. {
  37. // TODO: Modify the Window class or styles here by modifying
  38. //  the CREATESTRUCT cs
  39. return CScrollView::PreCreateWindow(cs);
  40. }
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CAmazeView drawing
  43. void CAmazeView::OnDraw(CDC* pDC)
  44. {
  45. int i, j;
  46. CAmazeDoc* pDoc = GetDocument();
  47. ASSERT_VALID(pDoc);
  48. // TODO: add draw code for native data here
  49. if(!pDoc->HaveAmaze())
  50. return;
  51.     for( i = 0 ; i <= 2 * pDoc->GetHeight() ; i++ ){
  52.         for( j = 0 ; j <= 2 * pDoc->GetWidth() ; j++ ){
  53.             if( pDoc->AmazeData(j, i) && pDoc->AmazeData(j + 1, i) ){
  54. pDC->MoveTo((j + 1) * SEPARATE, (i + 1) * SEPARATE);
  55. pDC->LineTo((j + 2) * SEPARATE, (i + 1) * SEPARATE);
  56.             }
  57.             if( pDoc->AmazeData(j, i) && pDoc->AmazeData(j, i + 1) ){
  58. pDC->MoveTo((j + 1) * SEPARATE, (i + 1) * SEPARATE);
  59. pDC->LineTo((j + 1) * SEPARATE, (i + 2) * SEPARATE);
  60.             }
  61.         }
  62.     }
  63. if(m_bDis){
  64. CPen *oldpen, pen(PS_SOLID, 1, RGB(255, 0, 0));
  65. oldpen = pDC->SelectObject(&pen);
  66. pDC->MoveTo( (*(pDoc->m_pDisData) + 1) * SEPARATE, (*(pDoc->m_pDisData + 1) + 1) * SEPARATE );
  67. for( i = 1 ; i < pDoc->m_nDisNum ; i++ )
  68. pDC->LineTo( (*(pDoc->m_pDisData + 2 * i) + 1) * SEPARATE, (*(pDoc->m_pDisData + 2 * i + 1) + 1) * SEPARATE );
  69. pDC->SelectObject(oldpen);
  70. }
  71. }
  72. void CAmazeView::OnInitialUpdate()
  73. {
  74. CScrollView::OnInitialUpdate();
  75. CSize sizeTotal;
  76. // TODO: calculate the total size of this view
  77. sizeTotal.cx = sizeTotal.cy = 100;
  78. SetScrollSizes(MM_TEXT, sizeTotal);
  79. }
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CAmazeView diagnostics
  82. #ifdef _DEBUG
  83. void CAmazeView::AssertValid() const
  84. {
  85. CScrollView::AssertValid();
  86. }
  87. void CAmazeView::Dump(CDumpContext& dc) const
  88. {
  89. CScrollView::Dump(dc);
  90. }
  91. CAmazeDoc* CAmazeView::GetDocument() // non-debug version is inline
  92. {
  93. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAmazeDoc)));
  94. return (CAmazeDoc*)m_pDocument;
  95. }
  96. #endif //_DEBUG
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CAmazeView message handlers
  99. void CAmazeView::ResetScrollbar()
  100. {
  101. CAmazeDoc* pDoc = GetDocument();
  102. CSize sizeTotal;
  103. sizeTotal.cx = (pDoc->GetWidth() + 1) * 2 * SEPARATE;
  104. sizeTotal.cy = (pDoc->GetHeight() + 1) * 2 * SEPARATE;;
  105. SetScrollSizes(MM_TEXT, sizeTotal);
  106. }
  107. void CAmazeView::OnNew() 
  108. {
  109. // TODO: Add your command handler code here
  110. GetDocument()->CreateAmaze();//创建迷宫
  111. ResetScrollbar();//设置滚动条
  112. Invalidate();//更新显示
  113. }
  114. void CAmazeView::OnDis() 
  115. {
  116. // TODO: Add your command handler code here
  117. m_bDis = m_bDis ? false : true;
  118. Invalidate();
  119. }
  120. void CAmazeView::OnUpdateDis(CCmdUI* pCmdUI) 
  121. {
  122. // TODO: Add your command update UI handler code here
  123. pCmdUI->SetCheck(m_bDis);
  124. }
  125. void CAmazeView::OnWidth() 
  126. {
  127. // TODO: Add your command handler code here
  128. CSetup dlg;
  129. CAmazeDoc* pDoc = GetDocument();
  130. dlg.m_strPrompt = "迷宫宽度:";
  131. dlg.m_nValue = pDoc->GetWidth();
  132. if(dlg.DoModal() == IDOK)
  133. pDoc->SetWidth(dlg.m_nValue);
  134. }
  135. void CAmazeView::OnHeight() 
  136. {
  137. // TODO: Add your command handler code here
  138. CSetup dlg;
  139. CAmazeDoc* pDoc = GetDocument();
  140. dlg.m_strPrompt = "迷宫高度:";
  141. dlg.m_nValue = pDoc->GetHeight();
  142. if(dlg.DoModal() == IDOK)
  143. pDoc->SetHeight(dlg.m_nValue);
  144. }