This code demonstrates using rich text in tooltips, as seen in Query Analyser utility of MS SQL Server 7.
It is more like a proof-of-concept then a finished code, and is heavily based on two classes from CodeGuru :
TFXDataTip by S. Wilson and CAutoRichEditCtrl by Jeremy Iverson
First class was modifyed to hold a hidden AutoRichEdit control as a static member and use it for rendering the
RTF text to the window. Function of AutoRichEdit are used to load text into the control.
Most of the magic behind the code is in the OnPaint handler of the tooltip window. The idea is to utilise
RichEdit printing functions to copy the picture to screen DC instead of printer.
void TFXDataTip::OnPaint()
{
CPaintDC dc(this); // device context for paintingCRect rect;
GetClientRect(&rect);dc.SetBkColor(::GetSysColor(COLOR_INFOBK));
//dc.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
//dc.SetMapMode(MM_TEXT);if(_richCtrl)
{
_richCtrl->SetRTF(m_tip);FORMATRANGE fr;
fr.hdc = dc;
fr.hdcTarget = dc;
fr.rc = CRect((rect.Width( ) / 2), (_border / 2) ,m_size.cx*15, m_size.cy*15);
fr.rcPage = CRect(0,0,0,0);
fr.chrg.cpMin = 0;
fr.chrg.cpMax = -1;_richCtrl->FormatRange( &fr );
}}
Using it from the dialog is also rather simple :
void CRich1Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
CWnd *pwnd = ChildWindowFromPoint(point);
if(pwnd)
{
int nID = pwnd->GetDlgCtrlID();switch(nID)
{
case IDC_RICH_PLACEHOLDER:
m_datatip.Set(point, m_tip1);
break;
case IDC_TEXT:
m_datatip.Set(point, m_tip2);
break;
case IDC_IMAGE_PLACEHOLDER:
m_datatip.Set(point, m_tip3);
break;
default:
break;
}
}
CDialog::OnMouseMove(nFlags, point);
}
Issues and possible enhancements :