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; }