void FProgress::DrawMeter(CDC& dc, FRect& rcPaint) { //fill the unavailable int nLines = rcPaint.Width() / (gLineDistance + gPenWidth) + 1; int nAvailLines = (int)GetAvail((double)nLines) ; int nCurrLines = (int)GetCurrent((double)nLines); assert(nAvailLines >= nCurrLines); int x = rcPaint.left; int y = rcPaint.top; dc.MoveTo(x, y); int lh = rcPaint.Height() - 0; int mh = lh; int nPenIndex = 2; dc.SelectPen(m_Pens[nPenIndex]); dword dwStyle = GetWindowLong(GWL_STYLE); for (int k = 0; k < nLines; k++) { if (k == nCurrLines) { if (k < nAvailLines) dc.SelectPen(m_Pens[1]); else dc.SelectPen(m_Pens[0]); if (dwStyle & PROG_LARGER_CURRENT) { lh = lh / 2; y += lh / 2; dc.MoveTo(x, y); } } else if (k == nAvailLines) { dc.SelectPen(m_Pens[0]); } if (dwStyle & PROG_GROWING) { double dblNow = (double)k / (double)nLines; lh = (int)(mh * dblNow); y = mh - lh; dc.MoveTo(x, y); } dc.LineTo(x, y + lh); x += gLineDistance; x += gPenWidth; dc.MoveTo(x, y); } }