WZDLISTV.CPP
上传用户:leishk
上传日期:2022-03-16
资源大小:3649k
文件大小:5k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. // WzdListView.cpp : implementation of the CWzdListView class
  2. //
  3. #include "stdafx.h"
  4. #include "Wzd.h"
  5. #include "WzdDoc.h"
  6. #include "WzdListView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CWzdListView
  14. IMPLEMENT_DYNCREATE(CWzdListView, CListView)
  15. BEGIN_MESSAGE_MAP(CWzdListView, CListView)
  16. //{{AFX_MSG_MAP(CWzdListView)
  17. ON_WM_LBUTTONDBLCLK()
  18. //}}AFX_MSG_MAP
  19. // Standard printing commands
  20. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  21. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  22. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  23. END_MESSAGE_MAP()
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CWzdListView construction/destruction
  26. CWzdListView::CWzdListView()
  27. {
  28. // TODO: add construction code here
  29. }
  30. CWzdListView::~CWzdListView()
  31. {
  32. }
  33. BOOL CWzdListView::PreCreateWindow(CREATESTRUCT& cs)
  34. {
  35. // TODO: Modify the Window class or styles here by modifying
  36. //  the CREATESTRUCT cs
  37. return CListView::PreCreateWindow(cs);
  38. }
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CWzdListView drawing
  41. void CWzdListView::OnDraw(CDC* pDC)
  42. {
  43. CWzdDoc* pDoc = GetDocument();
  44. ASSERT_VALID(pDoc);
  45. // TODO: add draw code for native data here
  46. }
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CWzdListView printing
  49. BOOL CWzdListView::OnPreparePrinting(CPrintInfo* pInfo)
  50. {
  51. // default preparation
  52. return DoPreparePrinting(pInfo);
  53. }
  54. void CWzdListView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  55. {
  56. // TODO: add extra initialization before printing
  57. }
  58. void CWzdListView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  59. {
  60. // TODO: add cleanup after printing
  61. }
  62. /////////////////////////////////////////////////////////////////////////////
  63. // CWzdListView diagnostics
  64. #ifdef _DEBUG
  65. void CWzdListView::AssertValid() const
  66. {
  67. CView::AssertValid();
  68. }
  69. void CWzdListView::Dump(CDumpContext& dc) const
  70. {
  71. CView::Dump(dc);
  72. }
  73. CWzdDoc* CWzdListView::GetDocument() // non-debug version is inline
  74. {
  75. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWzdDoc)));
  76. return (CWzdDoc*)m_pDocument;
  77. }
  78. #endif //_DEBUG
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CWzdListView message handlers
  81. void CWzdListView::OnInitialUpdate() 
  82. {
  83. CListView::OnInitialUpdate();
  84. // attach image lists to list control
  85. m_ImageList.Create(IDB_NORMAL_BITMAP, 32, 1, RGB(0,0,0));
  86. GetListCtrl().SetImageList(&m_ImageList, LVSIL_NORMAL);
  87. m_ImageSmallList.Create(IDB_SMALL_BITMAP, 16, 1, RGB(0,0,0));
  88. GetListCtrl().SetImageList(&m_ImageSmallList, LVSIL_SMALL);
  89. // initialize list control
  90. CClientDC dc(this);
  91. TEXTMETRIC tm;
  92. dc.GetTextMetrics(&tm);
  93. GetListCtrl().ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS);
  94. GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT);
  95. GetListCtrl().InsertColumn(0,"Name",LVCFMT_LEFT,20*tm.tmAveCharWidth,0);
  96. GetListCtrl().InsertColumn(1,"Comment",LVCFMT_LEFT,30*tm.tmAveCharWidth,1);
  97. }
  98. void CWzdListView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
  99. {
  100. if (lHint&TREE_VIEW_ONLY)
  101. {
  102. return;
  103. }
  104. GetListCtrl().DeleteAllItems();
  105. switch (lHint)
  106. {
  107. case ICON_LIST_VIEW:
  108. GetListCtrl().ModifyStyle(LVS_LIST|LVS_SMALLICON|LVS_REPORT,LVS_ICON);
  109. break;
  110. case LIST_LIST_VIEW:
  111. GetListCtrl().ModifyStyle(LVS_ICON|LVS_SMALLICON|LVS_REPORT,LVS_LIST);
  112. break;
  113. case SMALL_ICON_LIST_VIEW:
  114. GetListCtrl().ModifyStyle(LVS_LIST|LVS_ICON|LVS_REPORT,LVS_SMALLICON);
  115. break;
  116. case REPORT_LIST_VIEW:
  117. GetListCtrl().ModifyStyle(LVS_LIST|LVS_SMALLICON|LVS_ICON,LVS_REPORT);
  118. break;
  119. }
  120. // list all folders in selection
  121. POSITION pos;
  122. CWzdInfo *pSelInfo=GetDocument()->GetSelection();
  123. for (pos = pSelInfo->m_list.GetHeadPosition(); pos;)
  124. {
  125. CWzdInfo *pInfo = pSelInfo->m_list.GetNext(pos);
  126. if (pInfo->m_nCategory==CWzdInfo::FOLDER)
  127. {
  128.   AddLine(pInfo);
  129. }
  130. }
  131. // list all files in selection
  132. for (pos = pSelInfo->m_list.GetHeadPosition(); pos;)
  133. {
  134. CWzdInfo *pInfo = pSelInfo->m_list.GetNext(pos);
  135. if (pInfo->m_nCategory==CWzdInfo::FILE)
  136. {
  137.   AddLine(pInfo);
  138. }
  139. }
  140. }
  141. void CWzdListView::AddLine(CWzdInfo *pInfo)
  142. {
  143. LV_ITEM item;
  144. item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
  145. item.iItem = GetListCtrl().GetItemCount();
  146. item.iSubItem = 0;
  147. item.pszText = (char *)LPCTSTR(pInfo->m_sName);
  148. item.iImage = pInfo->m_nCategory;
  149. item.lParam = (DWORD)pInfo;
  150. int ndx=GetListCtrl().InsertItem(&item);
  151. // if report style add comment
  152. if (GetListCtrl().GetStyle() & LVS_REPORT)
  153. {
  154. GetListCtrl().SetItemText(ndx, 1, pInfo->m_sComment); 
  155. }
  156. }
  157. void CWzdListView::OnLButtonDblClk(UINT nFlags, CPoint point) 
  158. {
  159. int ndx;
  160. if (GetListCtrl().GetSelectedCount()==1 &&
  161.  (ndx = GetListCtrl().GetNextItem(-1, LVIS_SELECTED)) != -1)
  162. {
  163. GetDocument()->SaveSelection((CWzdInfo *)GetListCtrl().GetItemData(ndx),TREE_VIEW_SELECT);
  164. }
  165. CListView::OnLButtonDblClk(nFlags, point);
  166. }