文字横向滚动的实现

void  CMyStatic::OnTimer(UINT  nIDEvent)   

           //  TODO:  Add  your  message  handler  code  here  and/or  call  default 
           CString  strText; 
           GetWindowText(strText); 
           if  (strText  ==  m_strText) 
           { 
                       CDC*  pDC  =  GetDC(); 
                       pDC->SelectObject(&m_font); 
                       CSize  size  =  pDC->GetTextExtent(strText); 
                       ReleaseDC(pDC); 
                       CRect  rect; 
                       GetClientRect(rect); 
                       int  iWidth  =  rect.Width(); 
                       if  (size.cx  >  iWidth) 
                       {                         
 
                                   Invalidate(); 
                                   UpdateWindow(); 
                                   m_iExtend  +=  2; 
                                   if  (m_iExtend  >  size.cx) 
                                               m_iExtend  -=  size.cx  +  8; 
                       } 
           } 
           else 
           { 
                       m_iExtend  =  0; 
                       m_strText  =  strText; 
           } 
           CStatic::OnTimer(nIDEvent); 

void  CMyStatic::OnPaint()   

           //  TODO:  Add  your  message  handler  code  here 
            
           CPaintDC  dc(this); 
           CRect  rc; 
           GetClientRect(rc); 
           CString  strText; 
           GetWindowText(strText); 
           CDC  memDC; 
           memDC.CreateCompatibleDC(&dc); 
           CBitmap  bmp; 
           bmp.CreateCompatibleBitmap(&dc,  rc.Width(),  rc.Height()); 
           memDC.SelectObject(&bmp); 
           memDC.SelectObject(&m_font); 
           dc.SelectObject(&m_font); 
                 memDC.FillSolidRect(rc,  RGB(255,  255,  255); 
           CSize  size  =  memDC.GetTextExtent(strText); 
           if  (size.cx  >  rc.Width()) 
           { 
           if  (size.cx  -  m_iExtend  >  0) 
                       memDC.TextOut(rc.left  -  m_iExtend,  rc.top  +  (rc.Height()  -  size.cy)/2,  strText); 
           if  (rc.left  -  m_iExtend  +  8  +size.cx  <  rc.right) 
                       memDC.TextOut(rc.left  -  m_iExtend  +  8+size.cx  ,  rc.top  +  (rc.Height()  -  size.cy)/2,  strText); 
           } 
           else 
                       memDC.TextOut(rc.left,  rc.top  +  (rc.Height()  -  size.cy)/2,  strText); 
 
 
           dc.BitBlt(rc.left,  rc.top,  rc.Width(),  rc.Height(),  &memDC,  rc.left,  rc.top,  SRCCOPY); 
           memDC.DeleteDC(); 
           bmp.DeleteObject(); 
}

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/goodboyws/archive/2005/09/26/489731.aspx

你可能感兴趣的:(文字横向滚动的实现)