不使用gdi+绘制旋转文字

2012/09/13 program 共 1014 字,约 3 分钟

OnPaint()处理函数:

         CPaintDCdc(this);

         CRectrcRect;

         GetClientRect(&rcRect);

 

         if( m_strText.IsEmpty()==FALSE){

                   CFontfont;

 

                   dc.SetBkMode(TRANSPARENT);

                   dc.SetTextColor(m_clrText);

 

                   m_lffont.lfHeight= MulDiv(14, -dc.GetDeviceCaps(LOGPIXELSY),72);

 

                   //设定新的旋转角度

                  m_lffont.lfEscapement= m_nGradient*10;

 

                   //创建字体并选进设备场景

                   font.CreateFontIndirect(&m_lffont);

                   CFont* pOldFont=dc.SelectObject(&font);

 

                   CSizefsize= dc.GetTextExtent(m_strText);

 

                   doublefhudu= m_nGradient*M_PI/180;

                   intnNewWidth= (int)ceil( fsize.cx* cos(fhudu) );

                   intnNewHeight= (int)ceil( fsize.cx* sin(fhudu) );

                   intnDeltaWidth=(int)ceil( fsize.cy* sin(fhudu) );

                   intnDeltaHeight=(int)ceil( fsize.cy* cos(fhudu) );

 

                   dc.TextOut( (rcRect.right-nNewWidth-nDeltaWidth)/2,(rcRect.bottom+nNewHeight-nDeltaHeight)/2,m_strText);

 

                   //分行多行显示

                   //int height = dc.DrawText(m_strText,rcRect,DT_CENTER |DT_WORDBREAK | DT_CALCRECT | DT_EDITCONTROL); // 获得文本高度

                   //rcRect.DeflateRect(0,(rcRect.Height() - height) / 2); // 改变rect

                   //dc.DrawText(m_strText,rcRect, DT_CENTER | DT_EDITCONTROL| DT_WORDBREAK);

 

                   //原来字体

                   dc.SelectObject(pOldFont);

                   font.DeleteObject();

         }

文档信息

Search

    Table of Contents