MarkupListCtrl.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // MarkupListCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MarkupListCtrl.h"
  5. #include "Markup/XTPMarkupObject.h"
  6. #include "Markup/XTPMarkupBuilder.h"
  7. #include "Markup/XTPMarkupUIElement.h"
  8. #include "Markup/XTPMarkupDrawingContext.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CMarkupListCtrl
  16. MARKUP_LISTITEM::MARKUP_LISTITEM(CXTPMarkupContext* pContext)
  17. {
  18. this->pItem = NULL;
  19. this->pContext = pContext;
  20. }
  21. MARKUP_LISTITEM::~MARKUP_LISTITEM()
  22. {
  23. MARKUP_RELEASE(pItem);
  24. }
  25. void MARKUP_LISTITEM::Resolve(LPCTSTR lpszMarkup)
  26. {
  27. strMarkup = lpszMarkup;
  28. MARKUP_RELEASE(pItem);
  29. pItem = pContext->Parse(strMarkup);
  30. }
  31. CMarkupListCtrl::CMarkupListCtrl()
  32. {
  33. }
  34. CMarkupListCtrl::~CMarkupListCtrl()
  35. {
  36. }
  37. bool CMarkupListCtrl::Init()
  38. {
  39. return true;
  40. }
  41. BEGIN_MESSAGE_MAP(CMarkupListCtrl, CXTListBox)
  42. //{{AFX_MSG_MAP(CMarkupListCtrl)
  43. ON_WM_SIZE()
  44. ON_WM_LBUTTONDOWN()
  45. //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CMarkupListCtrl message handlers
  49. void CMarkupListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
  50. {
  51. MARKUP_LISTITEM* pListItem = (MARKUP_LISTITEM*)lpDrawItemStruct->itemData;
  52. if (!pListItem)
  53. return;
  54. if (!pListItem->pItem)
  55. return;
  56. CXTPMarkupDrawingContext dc(lpDrawItemStruct->hDC);
  57. if (((LONG)(lpDrawItemStruct->itemID) >= 0) &&
  58. (lpDrawItemStruct->itemAction & (ODA_DRAWENTIRE | ODA_SELECT)))
  59. {
  60. if (((lpDrawItemStruct->itemState & ODS_SELECTED) != 0))
  61. {
  62. dc.FillSolidRect(&lpDrawItemStruct->rcItem, 0xc9afa6);
  63. }
  64. else
  65. {
  66. dc.FillSolidRect(&lpDrawItemStruct->rcItem, GetSysColor(COLOR_WINDOW));
  67. }
  68. pListItem->pItem->Arrange(lpDrawItemStruct->rcItem);
  69. pListItem->pItem->Render(&dc);
  70. }
  71. if ((lpDrawItemStruct->itemAction & ODA_FOCUS) != 0)
  72. {
  73. ::SetTextColor(lpDrawItemStruct->hDC, 0);
  74. ::SetBkColor(lpDrawItemStruct->hDC,0xFFFFFF);
  75. ::DrawFocusRect(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem);
  76. }
  77. }
  78. void CMarkupListCtrl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
  79. {
  80. MARKUP_LISTITEM* pListItem = (MARKUP_LISTITEM*)lpMeasureItemStruct->itemData;
  81. if (!pListItem)
  82. return;
  83. if (!pListItem->pItem)
  84. return;
  85. CRect rc;
  86. GetClientRect(rc);
  87. CXTPMarkupDrawingContext dc;
  88. pListItem->pItem->Measure(&dc, CSize(rc.Width(), rc.Height()));
  89. lpMeasureItemStruct->itemHeight = pListItem->pItem->GetDesiredSize().cy;
  90. }
  91. void CMarkupListCtrl::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct) 
  92. {
  93. delete (MARKUP_LISTITEM*)lpDeleteItemStruct->itemData;
  94. CXTListBox::DeleteItem(lpDeleteItemStruct);
  95. }
  96. void CMarkupListCtrl::OnSize(UINT nType, int cx, int cy) 
  97. {
  98. CXTListBox::OnSize(nType, cx, cy);
  99. CRect rc;
  100. GetClientRect(rc);
  101. CXTPMarkupDrawingContext dc;
  102. for (int i = 0; i < GetCount(); i++)
  103. {
  104. MARKUP_LISTITEM* pListItem = (MARKUP_LISTITEM*)GetItemDataPtr(i);
  105. if (!pListItem)
  106. continue;
  107. if (!pListItem->pItem)
  108. continue;
  109. pListItem->pItem->Measure(&dc, CSize(rc.Width(), rc.Height()));
  110. SetItemHeight(i, pListItem->pItem->GetDesiredSize().cy);
  111. }
  112. }
  113. void CMarkupListCtrl::ItemChanged(MARKUP_LISTITEM* pItem)
  114. {
  115. CRect rc;
  116. GetClientRect(rc);
  117. for (int i = 0; i < GetCount(); i++)
  118. {
  119. MARKUP_LISTITEM* pListItem = (MARKUP_LISTITEM*)GetItemDataPtr(i);
  120. if (pListItem == pItem)
  121. {
  122. CXTPMarkupDrawingContext dc;
  123. pListItem->pItem->Measure(&dc, CSize(rc.Width(), rc.Height()));
  124. SetItemHeight(i, pListItem->pItem->GetDesiredSize().cy);
  125. break;
  126. }
  127. }
  128. Invalidate(FALSE);
  129. }
  130. void CMarkupListCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
  131. {
  132. // TODO: Add your message handler code here and/or call default
  133. CXTListBox::OnLButtonDown(nFlags, point);
  134. }