ListBox.cpp
上传用户:sdgangtie
上传日期:2020-03-07
资源大小:7324k
文件大小:4k
开发平台:

Visual C++

  1. // MyListBox.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "VIS.h"
  5. #include "ListBox.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. CImageList g_Image_List;
  12. /////////////////////////////////////////////////////////////////////////////
  13. // MyListBox
  14. ListBox::ListBox()
  15. {
  16. BOOL bRet = FALSE;
  17. HICON hIcon = NULL;
  18. // Create image list
  19. bRet = g_Image_List.Create(16, 16, ILC_COLOR32 | ILC_MASK, 5, 1);
  20. ASSERT(bRet == TRUE);
  21. // Add some icons
  22. hIcon = AfxGetApp()->LoadIcon(IDI_ICON_LAB);
  23. g_Image_List.Add(hIcon);
  24. // Add some icons
  25. hIcon = AfxGetApp()->LoadIcon(IDI_ICON_LAB);
  26. g_Image_List.Add(hIcon);
  27. }
  28. ListBox::~ListBox()
  29. {
  30. }
  31. BEGIN_MESSAGE_MAP(ListBox, CListBox)
  32. //{{AFX_MSG_MAP(MyListBox)
  33. // NOTE - the ClassWizard will add and remove mapping macros here.
  34. //}}AFX_MSG_MAP
  35. END_MESSAGE_MAP()
  36. /////////////////////////////////////////////////////////////////////////////
  37. // MyListBox message handlers
  38. void ListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
  39. {
  40. //CRect members to store the position of the items
  41. CRect rItem;
  42. CRect rText;
  43. CRect rIcon;
  44. CDC* dc = CDC::FromHandle(lpDrawItemStruct->hDC);
  45. if ((int)lpDrawItemStruct->itemID < 0)
  46. {
  47. // If there are no elements in the List Box 
  48. // based on whether the list box has Focus or not 
  49. // draw the Focus Rect or Erase it,
  50. if ((lpDrawItemStruct->itemAction & ODA_FOCUS) && 
  51. (lpDrawItemStruct->itemState & ODS_FOCUS))
  52. {
  53. dc->DrawFocusRect(&lpDrawItemStruct->rcItem);
  54. }
  55. else if ((lpDrawItemStruct->itemAction & ODA_FOCUS) &&
  56. !(lpDrawItemStruct->itemState & ODS_FOCUS)) 
  57. {
  58. dc->DrawFocusRect(&lpDrawItemStruct->rcItem); 
  59. }
  60. return;
  61. }
  62. // String to store the text
  63. CString strText;
  64. // Get the item text.
  65. GetText(lpDrawItemStruct->itemID, strText);
  66. //Initialize the Item's row
  67. rItem = lpDrawItemStruct->rcItem;
  68. rIcon = lpDrawItemStruct->rcItem;
  69. rIcon.bottom = rIcon.top + 16;
  70. rIcon.right = rIcon.left + 16;
  71. //Start drawing the text 2 pixels after the icon
  72. rText.left = rIcon.right + 2;
  73. rText.top  = rIcon.top;
  74. UINT nFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER;
  75. if (GetStyle() & LBS_USETABSTOPS)
  76. nFormat |= DT_EXPANDTABS;
  77. // If item selected, draw the highlight rectangle.
  78. // Or if item deselected, draw the rectangle using the window color.
  79. if ((lpDrawItemStruct->itemState & ODS_SELECTED) &&
  80.  (lpDrawItemStruct->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
  81. {
  82. CBrush br(::GetSysColor(COLOR_HIGHLIGHT));
  83. dc->FillRect(&rItem, &br);
  84. }
  85. else if (!(lpDrawItemStruct->itemState & ODS_SELECTED) && 
  86. (lpDrawItemStruct->itemAction & ODA_SELECT)) 
  87. {
  88. CBrush br(::GetSysColor(COLOR_WINDOW));
  89. dc->FillRect(&rItem, &br);
  90. }
  91. // If the item has focus, draw the focus rect.
  92. // If the item does not have focus, erase the focus rect.
  93. if ((lpDrawItemStruct->itemAction & ODA_FOCUS) && 
  94. (lpDrawItemStruct->itemState & ODS_FOCUS))
  95. {
  96. dc->DrawFocusRect(&rItem); 
  97. }
  98. else if ((lpDrawItemStruct->itemAction & ODA_FOCUS) &&
  99. !(lpDrawItemStruct->itemState & ODS_FOCUS))
  100. {
  101. dc->DrawFocusRect(&rItem); 
  102. }
  103. // To draw the Text set the background mode to Transparent.
  104. int iBkMode = dc->SetBkMode(TRANSPARENT);
  105. COLORREF crText;
  106. if (lpDrawItemStruct->itemState & ODS_SELECTED)
  107. crText = dc->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
  108. else if (lpDrawItemStruct->itemState & ODS_DISABLED)
  109. crText = dc->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));
  110. else
  111. crText = dc->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
  112. CPoint pt(rIcon.left,rIcon.top);
  113. g_Image_List.Draw(dc,0,pt,ILD_NORMAL);
  114. dc->TextOut(rText.left,rText.top,strText);
  115. //Draw the Text
  116. dc->SetTextColor(crText); 
  117. }
  118. void ListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
  119. {
  120. // TODO: Add your code to determine the size of specified item
  121. lpMeasureItemStruct->itemHeight = 32;
  122. }