如何在基于FormView界面的文档工程中使用多个进度条控件
本人在一个基于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




