; ;
m_ncurpos = 0 ;
m_nstep = 1 ;
// 初始化显示颜色
m_clrstart = colorref(rgb(255, 0, 0)) ;
m_clrend = colorref(rgb(0, 0, 255)) ;
m_clrbkground = ::getsyscolor(color_3dface) ;
m_clrtext = colorref(rgb(255, 255, 255)) ;
// 显示百分比,文字
m_bshowpercent = true ;
m_bshowtext = true ;
m_bkgroundbrush.createsolidbrush(m_clrbkground) ;
memset(m_text, 0, 32);
}
cgradientprogressctrl::~cgradientprogressctrl()
{
m_bkgroundbrush.deleteobject();
}
begin_message_map(cgradientprogressctrl, cprogressctrl)
on_wm_paint()
end_message_map()
/////////////////////////////////////////////////////////////////////////////
// cgradientprogressctrl 消息处理程序
void cgradientprogressctrl::setrange(int nlower, int nupper)
{
// 设置进度条的范围
m_nlower = nlower ;
m_nupper = nupper ;
m_ncurpos = nlower ;
cprogressctrl::setrange(nlower, nupper);
cprogressctrl::setpos(nlower);
}
int cgradientprogressctrl::setstep(int nstep)
{
// 设置步进值
m_nstep = nstep;
return (cprogressctrl::setstep(nstep));
}
int cgradientprogressctrl::setpos(int npos)
{
// 设置进度条位置
m_ncurpos = npos;
return (cprogressctrl::setpos(npos));
}
int cgradientprogressctrl::settext(const char * ptext, bool brepaint)
{
// 显示的文字
strcpy(m_text, ptext);
if (brepaint && m_bshowtext)
{
invalidate(true);
}
return 0;
}
void cgradientprogressctrl::onpaint()
{
cpaintdc dc(this); // 设备环境
// todo: 重画进度条
rect rectclient;
getclientrect(&rectclient);
if (m_ncurpos <= m_nlower || m_ncurpos > m_nupper)
{
// 不在范围之内直接以背景色填充
dc.fillrect(&rectclient, &m_bkgroundbrush);