PTARRYVW.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // ptarryvw.cpp : implementation file
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1995 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. #include "stdafx.h"
  13. #include "collect.h"
  14. #include "colledoc.h"
  15. #include "ptarryvw.h"
  16. #include "resource.h"
  17. #ifdef _DEBUG
  18. #undef THIS_FILE
  19. static char BASED_CODE THIS_FILE[] = __FILE__;
  20. #endif
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CPointArrayView
  23. IMPLEMENT_DYNCREATE(CPointArrayView, CFormView)
  24. CPointArrayView::CPointArrayView()
  25. : CFormView(CPointArrayView::IDD)
  26. {
  27. //{{AFX_DATA_INIT(CPointArrayView)
  28. m_x = 0;
  29. m_y = 0;
  30. //}}AFX_DATA_INIT
  31. }
  32. CPointArrayView::~CPointArrayView()
  33. {
  34. }
  35. void CPointArrayView::OnInitialUpdate()
  36. {
  37. CFormView::OnInitialUpdate();
  38. // Copy all of the points from the document's CArray of CPoints
  39. // to the listbox.
  40. m_ctlList.ResetContent();
  41. IStlPointArrayPtr& ptArray = GetDocument()->m_ptArray;
  42. try {
  43. for (int nIndex = 0; nIndex < (int) ptArray->Count; nIndex++)
  44. {
  45. CPoint pt = ptArray->Array[nIndex];
  46. AddPointToListBox(pt);
  47. }
  48. } catch(_com_error& e) {
  49. dump_com_error(e);
  50. }
  51. }
  52. void CPointArrayView::DoDataExchange(CDataExchange* pDX)
  53. {
  54. CFormView::DoDataExchange(pDX);
  55. //{{AFX_DATA_MAP(CPointArrayView)
  56. DDX_Control(pDX, IDC_LIST, m_ctlList);
  57. DDX_Text(pDX, IDC_X, m_x);
  58. DDX_Text(pDX, IDC_Y, m_y);
  59. //}}AFX_DATA_MAP
  60. }
  61. BEGIN_MESSAGE_MAP(CPointArrayView, CFormView)
  62. //{{AFX_MSG_MAP(CPointArrayView)
  63. ON_BN_CLICKED(IDC_ADD, OnAdd)
  64. ON_BN_CLICKED(IDC_UPDATE, OnUpdate)
  65. ON_BN_CLICKED(IDC_REMOVE, OnRemove)
  66. ON_BN_CLICKED(IDC_REMOVE_ALL, OnRemoveAll)
  67. ON_LBN_SELCHANGE(IDC_LIST, OnSelChangeList)
  68. //}}AFX_MSG_MAP
  69. END_MESSAGE_MAP()
  70. /////////////////////////////////////////////////////////////////////////////
  71. // CPointArrayView diagnostics
  72. #ifdef _DEBUG
  73. void CPointArrayView::AssertValid() const
  74. {
  75. CFormView::AssertValid();
  76. }
  77. void CPointArrayView::Dump(CDumpContext& dc) const
  78. {
  79. CFormView::Dump(dc);
  80. }
  81. CCollectDoc* CPointArrayView::GetDocument() // non-debug version is inline
  82. {
  83. return STATIC_DOWNCAST(CCollectDoc, m_pDocument);
  84. }
  85. #endif //_DEBUG
  86. /////////////////////////////////////////////////////////////////////////////
  87. // CPointArrayView internal implementation
  88. void CPointArrayView::AddPointToListBox(CPoint pt, int nSel)
  89. {
  90. // Add new point to the listbox.
  91. CString str;
  92. str.Format(_T("(%i,%i)"), pt.x, pt.y);
  93. if (nSel == -1)
  94. nSel = m_ctlList.AddString(str);
  95. else
  96. m_ctlList.InsertString(nSel, str);
  97. }
  98. /////////////////////////////////////////////////////////////////////////////
  99. // CPointArrayView message handlers
  100. void CPointArrayView::OnAdd()
  101. {
  102. if (UpdateData() != TRUE)
  103. return;
  104. // Add new point to the CList<int,int>
  105. CPoint pt(m_x, m_y);
  106. try {
  107. GetDocument()->m_ptArray->Add = pt;
  108. } catch(_com_error& e) {
  109. dump_com_error(e);
  110. }
  111. AddPointToListBox(pt);
  112. }
  113. void CPointArrayView::OnUpdate()
  114. {
  115. if (UpdateData() != TRUE)
  116. return;
  117. int nSel = m_ctlList.GetCurSel();
  118. if (nSel == LB_ERR)
  119. {
  120. AfxMessageBox(IDS_SELECT_POINT_TO_BE_UPDATED);
  121. return;
  122. }
  123. // Replace the point in the CArray of CPoints.
  124. CPoint pt(m_x, m_y);
  125. try {
  126. GetDocument()->m_ptArray->Array[nSel] = pt;
  127. } catch(_com_error& e) {
  128. dump_com_error(e);
  129. }
  130. // Update the old point in the listbox by removing
  131. // the old entry and adding a new entry.
  132. m_ctlList.DeleteString(nSel);
  133. AddPointToListBox(pt, nSel);
  134. }
  135. void CPointArrayView::OnRemove()
  136. {
  137. if (UpdateData() != TRUE)
  138. return;
  139. int nSel = m_ctlList.GetCurSel();
  140. if (nSel == LB_ERR)
  141. {
  142. AfxMessageBox(IDS_SELECT_POINT_TO_BE_REMOVED);
  143. return;
  144. }
  145. try {
  146. // Remove the point from the CArray of CPoints..
  147. GetDocument()->m_ptArray->Remove[nSel];
  148. } catch(_com_error& e) {
  149. dump_com_error(e);
  150. }
  151. // Remove the point from the listbox.
  152. m_ctlList.DeleteString(nSel);
  153. }
  154. void CPointArrayView::OnRemoveAll()
  155. {
  156. try {
  157. // Remove all of the points from the CArray of CPoints.
  158. GetDocument()->m_ptArray->RemoveAll();
  159. } catch(_com_error& e) {
  160. dump_com_error(e);
  161. }
  162. // Remove all of the points from the listbox.
  163. m_ctlList.ResetContent();
  164. }
  165. void CPointArrayView::OnSelChangeList()
  166. {
  167. try {
  168. // Update the edit control to reflect the new selection
  169. // in the listbox.
  170. CPoint pt = GetDocument()->m_ptArray->Array[m_ctlList.GetCurSel()];
  171. m_x = pt.x;
  172. m_y = pt.y;
  173. UpdateData(FALSE);
  174. } catch(_com_error& e) {
  175. dump_com_error(e);
  176. }
  177. }