I decided that your method was SO much nicer that I would throw out what I did and use your method. Just for general education if you happen to know how I would capture the WM_PAINT for the static control, it would be nice to know. In any case, I will no longer pursue it so it is of minor importance. I threw out the WM_PAINT message, threw out the invalidateRect and I just call it once. It turns out that I need an initialization routine for setting up the radio buttons depending upon the study type. It was most natural to just call my routine from there (like your WM_INITDIALOG suggestion). My code is simpler now: void CMyToolbar::SetPatInfo(void) { // font size can start at 16 if 3 lines are permitted. // start with font size = 12 for 4 lines. int fontSize = 120; int i, j; CFont hFont, *hOldFont; CWnd *wnd1; CSize sz1, sz2; CRect rc1; CString textOut[4]; CDC *pDC; CCardiacDoc *pDoc; CCardiacView *vw = CCardiacView::GetView(); pDoc = vw->GetDocument(); textOut[0] = pDoc->m_patName; if( textOut[0].IsEmpty()) return; textOut[1] = pDoc->m_patID; textOut[2] = pDoc->m_imageData[0].m_acqDateTime.Format("%d-%b-%Y"); textOut[3] = pDoc->m_styName; if( vw->m_masterFlg <= CCardiacView::VW_CARDIAC_DISP2) textOut[3] = "Myocardial Perfusion"; wnd1 = GetDlgItem(IDC_PATINFO); pDC = wnd1->GetDC(); sz1 = 0; for( i=j=0; i< 4; i++) { sz2 = pDC->GetTextExtent(textOut[i]); if( sz2.cx > sz1.cx) { sz1 = sz2; j = i; // j will be the maximum string } } wnd1->GetClientRect(&rc1); wnd1->SetWindowText(textOut[0] + "\r\n" + textOut[1] + "\r\n" + textOut[2] + "\r\n" + textOut[3]); sz1.cx = rc1.right; sz1.cy = rc1.bottom; while( fontSize > 80) { hFont.CreatePointFont( fontSize, "Ariel", pDC); hOldFont = pDC->SelectObject( &hFont); sz2 = pDC->GetTextExtent(textOut[j]); // the longest one if( sz2.cx <= sz1.cx) break; // found a size pDC->SelectObject( hOldFont); DeleteObject( hFont); hFont.Detach(); fontSize -= 20; // reduce font size by 2 } wnd1->SetFont(&hFont); hFont.Detach(); ReleaseDC(pDC); } I have a question about DeleteObject(hFont). Do I need it in my loop if I use hFont.Detach()? I noticed you didn't use it in your example, so I also didn't use it when I found the font I wanted. Will I add garbage if I change the patient to a new patient? Thanks again, Ilan