RSS
热门关键字:  计算机有关资料  33252  mkv  word  MKV_NT
当前位置 : 主页>vc编程>界面/窗口>列表

Visual C++实现各种文字特殊效果

来源: 作者: 时间:2006-11-30 点击:
  二、编程步骤

  1、启动Visual C++6.0,生成一个单文档视图结构的程序(对于旋转字体的程序:项目名为ViewFont;对于3D效果的程序:项目名为 3DText);

  2、重载应用程序的OnDraw(CDC* pDC)函数;

  3、添加代码,编译运行程序;

  三、程序代码

////////////////////////////////////旋转字体
void CViewFontView::OnDraw(CDC* pDC)
{
 CViewFontDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
 CString str(_T("Visua C++6.0编程实例"));//定义要显示的字符串;
 CRect rect;
 GetClientRect(&rect);
 pDC->SetBkMode(TRANSPARENT);//设置背景为透明效果;
 pDC->SetTextColor(RGB(100,100,255));//设置显示的文本颜色;
 CFont font;
 LOGFONT stFont;//定义字体结构;
 memset(&stFont,0,sizeof(stFont));//设置字体结构的属性;
 stFont.lfHeight=30;
 stFont.lfWeight=FW_NORMAL;
 stFont.lfClipPrecision=CLIP_LH_ANGLES;
 strcpy(stFont.lfFaceName,"Arial");
 //下面的代码以视图中心为圆点,在半径100的圆周上每隔30度显示字符串;
 for(double i=0;i<3600;i+=300)
 {
  stFont.lfEscapement=i;//设置字体的倾斜角度;
  font.CreateFontIndirect(&stFont);//根据字体结构创建字体对象;
  CFont *oldFont;
  oldFont=pDC->SelectObject(&font);//将创建的字体选入设备上下文;
  if(i<900)
   pDC->TextOut(rect.left+rect.Width )/2+100*cos(i/1800*3.14),rect.top+rect.Height ()/2-100*sin(i/1800*3.14),str);
  if(i>=900&&i<1800)
   pDC->TextOut(rect.left+rect.Width ()/2+100*cos(i/1800*3.14),
rect.top+rect.Height ()/2-100*sin(i/1800*3.14),str);
  if(i>=1800&&i<2700)
   pDC->TextOut(rect.left+rect.Width ()/2+100*cos(i/1800*3.14),
rect.top+rect.Height ()/2-100*sin(i/1800*3.14),str);
  if(i>=2700&&i<=3600)
   pDC->TextOut(rect.left+rect.Width ()/2+100*cos(i/1800*3.14),
rect.top+rect.Height ()/2-100*sin(i/1800*3.14),str);
  pDC->SelectObject(oldFont);//恢复设备上下文的字体;
  font.DeleteObject ();//删除创建的字体;
 }
}

//////////////////////////////////////////显示3D效果的程序

void CMy3DTextView::OnDraw(CDC* pDC)
{
 CMy3DTextDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
 CString string;
 string="Visual C++6.0编程实例";
 CFont m_fontLogo;
 m_fontLogo.CreateFont(144, 0, 0, 0, 155, FALSE, FALSE,0,0,0,0,0,0, "Arial");
 //创建字体;
 pDC->SetBkMode(TRANSPARENT);
 CRect rectText;
 GetClientRect(&rectText);
 CFont * OldFont = pDC->SelectObject(&m_fontLogo);
 COLORREF OldColor = pDC->SetTextColor( ::GetSysColor( COLOR_3DSHADOW));
 //阴影状态显示文字;
 pDC->DrawText( string, rectText+CPoint(2,2) , DT_SINGLELINE | DT_LEFT |DT_VCENTER|DT_CENTER);
 pDC->SetTextColor(::GetSysColor( COLOR_3DHILIGHT) );
 //高亮状态显示文字;
 pDC->DrawText( string, rectText, DT_SINGLELINE | DT_LEFT |DT_VCENTER|DT_CENTER);
 pDC->SetTextColor( OldColor);
 pDC->SelectObject(OldFont);
 m_fontLogo.DeleteObject();
}


  四、小结

  读者只要掌握了上面的内容,灵活运用Cfont和LOGFONT结构创建不同的字体,再结合显示颜色、位置、时间的设置,相信一定还可以实现更多的动态效果来。
共2页: 上一页 [1] 2 下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册