TestView.cpp
上传用户:kesuntpe
上传日期:2007-01-02
资源大小:29k
文件大小:5k
源码类别:

TreeView控件

开发平台:

Visual C++

  1. // TestView.cpp : implementation of the CTestView class
  2. //
  3. #include "stdafx.h"
  4. #include "Test.h"
  5. #include "TestDoc.h"
  6. #include "TestView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CTestView
  14. IMPLEMENT_DYNCREATE(CTestView, CTreeView)
  15. BEGIN_MESSAGE_MAP(CTestView, CTreeView)
  16. //{{AFX_MSG_MAP(CTestView)
  17. // NOTE - the ClassWizard will add and remove mapping macros here.
  18. //    DO NOT EDIT what you see in these blocks of generated code!
  19. //}}AFX_MSG_MAP
  20. // Standard printing commands
  21. ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
  22. ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
  23. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
  24. ON_MESSAGE(WM_DATAAVAILABLE, OnDataAvailable)
  25. END_MESSAGE_MAP()
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CTestView construction/destruction
  28. CTestView::CTestView()
  29. {
  30. // TODO: add construction code here
  31. }
  32. CTestView::~CTestView()
  33. {
  34. }
  35. BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs)
  36. {
  37. // TODO: Modify the Window class or styles here by modifying
  38. //  the CREATESTRUCT cs
  39. return CTreeView::PreCreateWindow(cs);
  40. }
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CTestView drawing
  43. void CTestView::OnDraw(CDC* pDC)
  44. {
  45. CTestDoc* pDoc = GetDocument();
  46. ASSERT_VALID(pDoc);
  47. // TODO: add draw code for native data here
  48. }
  49. void CTestView::OnInitialUpdate()
  50. {
  51. CTreeView::OnInitialUpdate();
  52. CTreeViewExt<int>::OnInitialUpdate();
  53. // TODO: You may populate your TreeView with items by directly accessing
  54. //  its tree control through a call to GetTreeCtrl().
  55. }
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CTestView printing
  58. BOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo)
  59. {
  60. // default preparation
  61. return DoPreparePrinting(pInfo);
  62. }
  63. void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  64. {
  65. // TODO: add extra initialization before printing
  66. }
  67. void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  68. {
  69. // TODO: add cleanup after printing
  70. }
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CTestView diagnostics
  73. #ifdef _DEBUG
  74. void CTestView::AssertValid() const
  75. {
  76. CTreeView::AssertValid();
  77. }
  78. void CTestView::Dump(CDumpContext& dc) const
  79. {
  80. CTreeView::Dump(dc);
  81. }
  82. CTestDoc* CTestView::GetDocument() // non-debug version is inline
  83. {
  84. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc)));
  85. return (CTestDoc*)m_pDocument;
  86. }
  87. #endif //_DEBUG
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CTestView message handlers
  90. // THIS function is required for MFC message maps to work correctly. 
  91. //We could just have added entry like this
  92. // ON_MESSAGE(WM_DATAAVAILABLE, CTreeViewExt::OnDataAvailable).
  93. //, but unfortunately that doesn't work correctly due to problems with 
  94. // multiple inheritance. The "this" pointer passed in this case points to
  95. // CTestView portion of the object and NOT the CTreeViewExt part.
  96. // Any ideas for solving this problem are welcome.
  97. LONG CTestView::OnDataAvailable(WPARAM wParam, LPARAM lParam)
  98. {
  99. return CTreeViewExt<int>::OnDataAvailable(wParam, lParam);
  100. }
  101. /////////////////////////////////////////////////////////////////////////////
  102. // CTreeViewExt overrides
  103. // provide the list of root level items to be added
  104. void CTestView::GetRootItems(list<TreeData>& List)
  105. {
  106. TreeData Data;
  107. Data.m_hHandle = NULL;
  108. Data.m_Data = 0;
  109. Data.m_nImage = 0;
  110. Data.m_strText = "Level 0";
  111. List.push_back(Data);
  112. }
  113. // itParent points to the parent item. We provide "children" for this item
  114. // in the List reference passed
  115. void CTestView::GetChildItems(list<TreeData>::iterator itParent, list<TreeData>& List)
  116. {
  117. if(itParent->m_nImage==2) // only two levels of data
  118. return; 
  119. switch(itParent->m_nImage)
  120. {
  121. case 0:
  122. {
  123. CString strText;
  124. for(int i=0 ; i<4; i++)
  125. {
  126. // no need to provide handle value
  127. TreeData Data;
  128. Data.m_Data = 1;
  129. Data.m_nImage = 1;
  130. strText.Format("Level 1 : Item %d", i);
  131. Data.m_strText = strText;
  132. List.push_back(Data);
  133. }
  134. }
  135. break;
  136. case 1:
  137. {
  138. CString strText;
  139. for(int i=0 ; i<4; i++)
  140. {
  141. // no need to provide handle value
  142. TreeData Data;
  143. Data.m_Data = 2;
  144. Data.m_nImage = 2;
  145. strText.Format("Level 2 : Item %d", i);
  146. Data.m_strText = strText;
  147. List.push_back(Data);
  148. }
  149. }
  150. break;
  151. default:
  152. break;
  153. }
  154. }
  155. /////////////////////////////////////////////////////////////////////////////
  156. //