nt class=keyword color=#224fff size=2>return; } // 绘制进度条本身 float maxwidth((float) m_ncurpos /(float) m_nupper*(float) rectclient.right); draw(&dc, rectclient, (int) maxwidth); // 文字显示 dc.settextcolor(m_clrtext); dc.setbkmode(transparent); hgdiobj holdfont = ::selectobject(dc.m_hdc, ::getstockobject(default_gui_font)); if (m_bshowpercent) { // 显示进程条百分比 sprintf(m_percent, "%d%% ",(int) (100 * (float) m_ncurpos / m_nupper)); dc.drawtext(m_percent, &rectclient, dt_vcenter | dt_center | dt_singleline); } if (m_bshowtext) { // 显示进程条文字 rectclient.left = (rectclient.left + rectclient.right) / 2; dc.drawtext(m_text, &rectclient, dt_vcenter | dt_center | dt_singleline); } ::selectobject(dc.m_hdc, holdfont); // 不要调用 cprogressctrl::onpaint() } void cgradientprogressctrl::draw(cpaintdc* pdc, const rect& rectclient, const int& nmaxwidth) { rect rectfill; //显示区域 float fstep; //每一步的幅宽 cmemdc memdc(pdc); int r, g, b; float rstep, gstep, bstep; //得到不同颜色并相减,返回颜色之间的最大差值 r = (getrvalue(m_clrend) - getrvalue(m_clrstart)); g = (getgvalue(m_clrend) - getgvalue(m_clrstart)); b = (getbvalue(m_clrend) - getbvalue(m_clrstart)); //使进程条显示的总数 等于最大的颜色差值 int nsteps = max(abs(r), max(abs(g), abs(b))); //确定每一颜色填充多大的矩形区域 fstep = (float) rectclient.right / (float) nsteps; //设置每一颜色填充的步数 rstep = r / (float) nsteps; gstep = g / (float) nsteps; bstep = b / (float) nsteps; r = getrvalue(m_clrstart); g = getgvalue(m_clrstart); b = getbvalue(m_clrstart); //绘制颜色渐变的进程条 for (int