void COXToolTipCtrl::DisplayToolTip(CPoint& pt, BOOL bExtended /*= FALSE*/) { ASSERT(::IsWindow(m_hWnd)); if (!m_bActivated || !m_pCurrentToolTip) return; m_bExtended = bExtended; CString str = GetTooltipText(m_pCurrentToolTip); if (str.IsEmpty()) return; //Calculate the width and height of the box dynamically CRect rect = GetBoundsRect(str, m_pCurrentToolTip->nWidth); rect = CalculateInfoBoxRect(pt, m_pCurrentToolTip, rect); ShowWindow(SW_HIDE); SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_SHOWWINDOW|SWP_NOCOPYBITS|SWP_NOACTIVATE|SWP_NOZORDER); // ModifyStyle(0, WS_VISIBLE); // ShowWindow(SW_SHOWNA); }
void CMFECToolTip::DisplayInfo( ToolTipInfo* pToolTip ) { if( pToolTip->nInfoSize <= 0 ) return; ASSERT(m_pParentWnd); CDC* pDC = m_pParentWnd->GetDC(); CRect oInfoRect; CBrush oBrush, *pOldBrush, oBorderBrush; int nX, nY; TEXTMETRIC TM; int nTextHigh; CFont oFont, *pOldFont; CWnd* pWnd = NULL; oBrush.CreateSolidBrush( pToolTip->nBackColor ); pOldBrush = pDC->SelectObject( &oBrush ); pDC->SetTextColor( pToolTip->nTextColor ); //calculate the width and height of the box dynamically CalculateHeightAndWidth( pToolTip->nControlInfo ); CalculateInfoBoxRect( pToolTip->nControlID, &oInfoRect ); oFont.CreateFont(m_nFontSize, 0, 0, 0, FW_REGULAR, 0, 0, 0, 0, 0, 0, 0, 0, "���ו"); pOldFont = pDC->SelectObject(&oFont); pDC->FillRect(&oInfoRect, &oBrush); pDC->SelectObject(pOldBrush); oBrush.DeleteObject(); oBorderBrush.CreateSolidBrush( pToolTip->nTextColor ); pOldBrush = pDC->SelectObject(&oBorderBrush); pDC->DrawEdge(&oInfoRect, BDR_RAISEDINNER , BF_RECT); pDC->SetTextAlign(TA_LEFT); pDC->GetTextMetrics(&TM); nTextHigh = TM.tmHeight + TM.tmExternalLeading - 2; nX = oInfoRect.left + 2; nY = oInfoRect.top + 3; for( register UINT i = 0; i < pToolTip->nInfoSize; i++) { pDC->TextOut(nX, nY, pToolTip->nControlInfo[i]); nY += m_nFontSize - 1; } pDC->SelectObject(pOldBrush); oBorderBrush.DeleteObject(); m_pParentWnd->ReleaseDC(pDC); }
void CMFECToolTip::ErasePreviousToolTipDisplay( UINT nControlID ) { //This assertion fails because you did not call Create() first. //m_pParentWnd was not initialized. ASSERT(m_pParentWnd); //if erase already, do not do it again if((m_nHeight == 0) || (m_nWidth == 0)) return; CRect oInfoRect(0,0,0,0); CalculateInfoBoxRect(nControlID, &oInfoRect); m_pParentWnd->InvalidateRect(&oInfoRect); m_pParentWnd->UpdateWindow(); m_nHeight = 0; m_nWidth = 0; }