void CXTPReportRecordItemIcon::GetCaptionRect(XTP_REPORTRECORDITEM_ARGS* pDrawArgs, CRect& rcItem) { if (pDrawArgs == NULL) return; CXTPReportControl* pControl = DYNAMIC_DOWNCAST(CXTPReportControl, pDrawArgs->pControl); if (pControl && pControl->IsIconView()) { // Adjust the rect for the text. pDrawArgs->rcItem.CopyRect(pDrawArgs->pRow->GetRect()); pDrawArgs->rcItem.DeflateRect(1, 1); pDrawArgs->rcItem.top += pControl->m_iIconHeight; // The left coming in here is to the right of the icon, we need to get back to the beginning. pDrawArgs->rcItem.left = pDrawArgs->pRow->GetRect().left + 5; pDrawArgs->rcItem.DeflateRect(2, 1, 2, 0); rcItem = pDrawArgs->rcItem; return; } else { CXTPReportRecordItem::GetCaptionRect(pDrawArgs, rcItem); } }
int CXTPReportRecordItemIcon::Draw(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs) { if (pDrawArgs == NULL) return CXTPReportRecordItem::Draw(pDrawArgs); CXTPReportControl* pControl = DYNAMIC_DOWNCAST(CXTPReportControl, pDrawArgs->pControl); if (pControl && pControl->IsIconView()) { pDrawArgs->rcItem = pDrawArgs->pRow->GetRect(); pDrawArgs->rcItem.DeflateRect(1, 1); } return CXTPReportRecordItem::Draw(pDrawArgs); }
void CXTPReportRecordItemIcon::OnDrawCaption(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pMetrics) { if (pDrawArgs == NULL) return; CXTPReportControl* pControl = DYNAMIC_DOWNCAST(CXTPReportControl, pDrawArgs->pControl); if (pControl && pControl->IsIconView()) { // Adjust the rect for the text. pDrawArgs->rcItem.DeflateRect(1, 1); pDrawArgs->rcItem.top += pControl->m_iIconHeight; CXTPReportPaintManager * pPaintManager = pControl->GetPaintManager(); const UINT c_uiDrawFlags = pDrawArgs->nTextAlign | DT_CENTER | DT_NOPREFIX | DT_WORDBREAK | DT_EDITCONTROL | DT_END_ELLIPSIS | DT_WORD_ELLIPSIS; // Get rect for text CRect rcItem(pDrawArgs->rcItem); rcItem.DeflateRect(2, 1, 2, 0); rcItem = pPaintManager->CalculateMaxTextRect(pDrawArgs->pDC, pMetrics->strText, rcItem, TRUE, TRUE, c_uiDrawFlags); int nWidth = min(rcItem.Width() + 4, pDrawArgs->rcItem.Width()); // Center the rect. int nLeft = (pDrawArgs->rcItem.left + pDrawArgs->rcItem.right - nWidth) / 2; rcItem.left = nLeft; rcItem.right = rcItem.left + nWidth; if (rcItem.bottom >= pDrawArgs->rcItem.bottom) rcItem.bottom -= 2; pDrawArgs->rcItem.left = rcItem.left; pDrawArgs->rcItem.right = rcItem.right; //Draw the selection if (pDrawArgs->pRow->IsSelected() && (pDrawArgs->pDC && !pDrawArgs->pDC->IsPrinting())) { COLORREF clrBackground = 0; if (pControl->HasFocus()) { pMetrics->clrForeground = pPaintManager->m_clrHighlightText; pDrawArgs->pDC->SetTextColor(pMetrics->clrForeground); clrBackground = pPaintManager->m_clrHighlight; } else if (!pPaintManager->m_bHideSelection) { pMetrics->clrForeground = pPaintManager->m_clrSelectedRowText; pDrawArgs->pDC->SetTextColor(pMetrics->clrForeground); clrBackground = pPaintManager->m_clrSelectedRow; } // fill select rect pDrawArgs->pDC->FillSolidRect(rcItem, clrBackground); } if (pDrawArgs->pRow->IsFocused() && pControl->HasFocus() && pControl->IsRowFocusVisible()) { rcItem.InflateRect(1, 1); pPaintManager->DrawFocusedRow(pDrawArgs->pDC, rcItem); } pDrawArgs->nTextAlign |= c_uiDrawFlags; } CXTPReportRecordItem::OnDrawCaption(pDrawArgs, pMetrics); }