CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

如何在基于FormView界面的文档工程中使用多个进度条控件

楼主cnlyli(牛头)2003-02-03 01:34:18 在 VC/MFC / 界面 提问

本人在一个基于FormView界面的文档工程中需使用多个进度条控件,分别显示不同控制项的进度,且需要动态改变填充色和字体.参考相关资料在编程中以CProgressCtrl为基类生成自己的类CGradientProgressCtrl1,CGradientProgressCtrl2......重载OnPaint()分别控制各个进度条控件,编译执行正常但关闭程序后出现错误提示不知是哪个地方出错了.是否方法有问题?请高手指点该如何编程使用多个进度条控件,另如何在OnPaint()中改变字体?急!急!急! 问题点数:0、回复次数:4Top

1 楼mahatma_cn(研究硕士生)回复于 2003-02-04 22:30:56 得分 0

你虫灾的是哪个OnPaint()?估计问题不大,代码没有写对。  
  OnPaint()中创建字体CFont对象(最好不要在OnPaint()中创建)  
  然后选进设备描述表中,并保留旧字体,在退出OnPaint()前把旧字体还原进去。Top

2 楼cnlyli(牛头)回复于 2003-02-06 10:00:36 得分 0

to   mahatma_cn:  
  在OnPaint()中创建了CFont在进度条中显示,但刚开始字型还对,马上就复原为系统字体了,不知是什么原因?Top

3 楼qrlvls( 空 气 )回复于 2003-02-07 17:30:55 得分 0

to楼上,把代码贴出来,是不是你的font只创建一次,然后被selectObject改掉了Top

4 楼cnlyli(牛头)回复于 2003-02-07 20:08:19 得分 0

代码如下,请指点.  
  //////////  
  void   CGradientProgressCtrl::OnPaint()    
  {  
  CPaintDC   dc(this);   //   device   context   for   painting  
   
  //如果进度条的当前位置不正确,则渐变到背景色  
  if   (m_nCurrentPosition   <=   m_nLower   ||   m_nCurrentPosition   >=   m_nUpper)  
  {  
  CRect   rect;  
  GetClientRect(rect);  
  CBrush   brush;  
  brush.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));  
  dc.FillRect(&rect,   &brush);  
  VERIFY(brush.DeleteObject());  
  return;  
  }  
   
   
  //获得需要渐变的区域  
  CRect   rectClient;  
  GetClientRect(&rectClient);  
  float   maxWidth((float)m_nCurrentPosition/(float)m_nUpper   *   (float)rectClient.right);  
   
   
  //画渐变颜色  
  DrawGradient(&dc,   rectClient,   (int)maxWidth);  
   
  //如果需要显示百分数,则显示  
  if   (m_bShowPercent)  
  {  
  ////test  
  PAINTSTRUCT ps;  
  HDC hDC;  
  CDC* cdc;  
   
  cdc=BeginPaint(&ps);  
  hDC=GetDC()->m_hDC;  
         
   
                  HFONT   hF_black;  
   
  hF_black=CreateFont(40,0,0,0,FW_LIGHT,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"Courier   New");    
  SetTextColor(RGB(0,0,255));  
             
   
  SetBkMode(hDC,TRANSPARENT);  
  SelectObject(hDC,hF_black);    
             
   
  CString   percent;  
  percent.Format("%.0f%%",   100.0f*(float)m_nCurrentPosition/(float)m_nUpper);  
           
  GetTextExtentPoint32(hDC,percent,strlen(percent),&size);  
  TextOut(hDC,rectClient.right/2,rectClient.top   ,percent,strlen(percent));    
  DeleteObject(hF_black);  
  EndPaint(&ps);  
  }  
  }  
  Top

相关问题

  • 进度条控件
  • 求 WebBrowser控件的文档
  • 请问如何 关联 进度控件?
  • 如何添加进度条控件?
  • 怎样用进度条控件?
  • Media Player6.4控件的进度条!!!
  • 怎样在文档中添加控件?
  • 关于控件SmartMenuXP开发的文档
  • 单文档程序的TOOLBUTTON控件
  • 求:痕迹保留文档控件

关键词

  • 控件
  • 字体
  • 渐变
  • 代码
  • dc
  • onpaint
  • cgradientprogressctrl
  • ncurrentposition
  • nupper
  • rectclient

得分解答快速导航

  • 帖主:cnlyli

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo