int CXTPReportRecordItemPreview::GetPreviewHeight(CDC* pDC, CXTPReportRow* pRow, int nWidth) { int nHeight = 0; XTP_REPORTRECORDITEM_METRICS* pMetrics = new XTP_REPORTRECORDITEM_METRICS; pMetrics->strText = GetPreviewText(); pRow->FillMetrics(NULL, this, pMetrics); CString strPreviewText = pMetrics->strText; if (strPreviewText.IsEmpty()) { pMetrics->InternalRelease(); return 0; } CXTPReportControl* pControl = pRow->GetControl(); int nIndentWidth = pControl->GetHeaderIndent(); CRect& rcIndent = pControl->GetPaintManager()->m_rcPreviewIndent; CRect rcPreviewItem(nIndentWidth + rcIndent.left, 0, nWidth - rcIndent.right, 0); if (m_pMarkupUIElement) { // Calculate Markup item height XTPMarkupSetDefaultFont(XTPMarkupElementContext(m_pMarkupUIElement), (HFONT)pMetrics->pFont->GetSafeHandle(), pMetrics->clrForeground); CSize szMarkup = XTPMarkupMeasureElement(m_pMarkupUIElement, rcPreviewItem.Width(), INT_MAX); nHeight = szMarkup.cy + rcIndent.top + rcIndent.bottom; } else { // Calculate height of a usual text CXTPFontDC font(pDC, pMetrics->pFont); int nMaxPreviewLines = pControl->GetPaintManager()->GetPreviewLinesCount(pDC, rcPreviewItem, strPreviewText); int nFontHeight = pDC->GetTextExtent(_T(" "), 1).cy; nHeight = nFontHeight * nMaxPreviewLines + rcIndent.top + rcIndent.bottom; } // Cleanup pMetrics->InternalRelease(); return nHeight; }
int CXTPReportColumn::GetBestFitWidth() { CXTPReportControl* pControl = GetControl(); CXTPReportPaintManager* pPaintManager = pControl->GetPaintManager(); int nBestColumnWidth = 0; CClientDC dc(pControl); CXTPFontDC font(&dc, &pPaintManager->m_fontCaption); nBestColumnWidth = 6 + GetCaptionWidth(&dc); if (GetIconID() != XTP_REPORT_NOICON) nBestColumnWidth += pPaintManager->DrawBitmap(NULL, pControl, GetRect(), GetIconID()) + 2; if (HasSortTriangle() && pPaintManager->m_DrawSortTriangleStyle != xtpReportDrawSortTriangleNever) nBestColumnWidth += 27; int nDataWidth = pControl->OnGetColumnDataBestFitWidth(this); nBestColumnWidth = max(nBestColumnWidth, nDataWidth); nBestColumnWidth = max(nBestColumnWidth, m_nMaxItemWidth); return nBestColumnWidth; }
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); }