BOOL CDrawInfo::DrawSelf( CDC* pDC, CPoint pos, int nItemID, CRect& rcItem ) { int nAyIndex = GetArrayIndexFromPoint(pos); int nCellIndex = PointToIndex(pos); if (nAyIndex != -1) {// 当前鼠标所在的资讯索引单元格 if (m_nActiveCellID == nCellIndex) { // 画激活背景 rcItem.DeflateRect(1,1,1,1); pDC->FillSolidRect(&rcItem, m_pColor->GetDiagramLayoutActiveFillColor()); // 设置激活前景色 SetCellText(nCellIndex, nItemID, NULL, TEXT_COLOR_ACTIVEFIXEDNAME); } else { // 设置默认前景色 SetCellText(nCellIndex, nItemID, NULL, TEXT_COLOR_FIXEDNAME); } } else {// 不是资讯索引单元格 if (pos == CPoint(GetColCount()-1, 0)) {// 如果是第一行,最后一列 ////////////////////////////////////////////////////////////////////////// // 计算全屏或者还原图标区域 CalcImageRect(&m_rcMaxScreen, &rcItem, TRUE); // 绘制图片 if (!m_bSizeMax) m_lstImage.Draw(pDC, 0, CPoint(m_rcMaxScreen.left, m_rcMaxScreen.top), ILD_TRANSPARENT); else m_lstImage.Draw(pDC, 4, CPoint(m_rcMaxScreen.left, m_rcMaxScreen.top), ILD_TRANSPARENT); ////////////////////////////////////////////////////////////////////////// // 计算关闭图标区域 CalcImageRect(&m_rcClose, &rcItem, FALSE); // 绘制图片 m_lstImage.Draw(pDC, 1, CPoint(m_rcClose.left, m_rcClose.top), ILD_TRANSPARENT); return TRUE; } else if (pos == CPoint(GetColCount()-1, 1)) { ////////////////////////////////////////////////////////////////////////// // 计算向上翻屏图标区域 CalcImageRect(&m_rcUp, &rcItem, TRUE); // 绘制图片 m_lstImage.Draw(pDC, 2, CPoint(m_rcUp.left, m_rcUp.top), ILD_TRANSPARENT); ////////////////////////////////////////////////////////////////////////// // 计算向下翻屏图标区域 CalcImageRect(&m_rcDown, &rcItem, FALSE); // 绘制图片 m_lstImage.Draw(pDC, 3, CPoint(m_rcDown.left, m_rcDown.top), ILD_TRANSPARENT); return TRUE; } } return FALSE; }
void CSListCtrl::DrawImage(int nItem, int nSubItem, CDC *pDC) { CRect imgRect; if(!CalcImageRect(nItem, nSubItem, imgRect)) { return; } CListImage* pListImage = GetSubItemData(nItem, nSubItem)->m_pListImage; ASSERT(pListImage != NULL); pListImage->m_imageList->DrawIndirect(pDC, pListImage->m_nImage, imgRect.TopLeft(), imgRect.Size(), CPoint(0, 0)); }
BOOL CSListCtrl::CalcTextRect(int nItem, int nSubItem, CRect& rcText) { GetSubItemRect(nItem, nSubItem, LVIR_BOUNDS, rcText); CRect rcTemp; //Move if image if( CalcImageRect(nItem, nSubItem, rcTemp) ) { rcText.left = rcTemp.right; } else if( CalcCheckBoxRect(nItem, nSubItem, rcTemp) ) { rcText.left = rcTemp.right; } rcText.DeflateRect(m_HeaderCtrl.m_nSpace, 0); if(rcText.IsRectEmpty()) { return FALSE; } return TRUE; }