int CDrawGrid::GetLinesPerPage() /* ============================================================ Function : CDrawGrid::GetLinesPerPage Description : Gets the number of lines in the grid for a single page. Access : Return : int - Number of lines Parameters : none Usage : Call to get the lines fitting to a single page. ============================================================*/ { CDoubleRect rect = GetPosition(); return static_cast< int >( rect.Height() * static_cast< double >( GetLPI() ) ); }
void CDigistring::OnPaint() { CRect rect; CDoubleRect CharRect; GetClientRect(&rect); CPaintDC dc(this); // device context for painting dc.SetBkColor(m_BackColor); CMyMemDC memDC(&dc, &rect); CBrush hBrushOff, hBrushOn; hBrushOff.CreateSolidBrush(m_OffColor); hBrushOn.CreateSolidBrush(m_OnColor); CBrush *pOldBrush = memDC.SelectObject(&hBrushOn); int r = int(GetRValue(m_OffColor) * 0.75 + GetRValue(m_BackColor) * 0.25); int g = int(GetGValue(m_OffColor) * 0.75 + GetGValue(m_BackColor) * 0.25); int b = int(GetBValue(m_OffColor) * 0.75 + GetBValue(m_BackColor) * 0.25); CPen OffPen(PS_SOLID | PS_ENDCAP_ROUND, 1, RGB(r,g,b)); r = int(GetRValue(m_OnColor) * 0.75 + GetRValue(m_BackColor) * 0.25); g = int(GetGValue(m_OnColor) * 0.75 + GetGValue(m_BackColor) * 0.25); b = int(GetBValue(m_OnColor) * 0.75 + GetBValue(m_BackColor) * 0.25); CPen OnPen(PS_SOLID | PS_ENDCAP_ROUND, 1, RGB(r,g,b)); CPen *pOldPen = memDC.SelectObject(&OffPen); int iTotWidth = 0; double dRelWidth, dRelHeight; // TODO: Add your message handler code here DigiCharVector::iterator CharIterator; // Calculate resizing factors... BuildString(); for (CharIterator = m_CharVector.begin(); CharIterator != m_CharVector.end(); CharIterator++) { iTotWidth += CharIterator->GetNormWidth(); } dRelWidth = double(rect.Width()) / iTotWidth; dRelHeight = double(rect.Height()) / NORM_DIGIHEIGHT; // If proportional make offset for centered text if (m_DispStyle & DS_SZ_PROP) { if (dRelWidth < dRelHeight) dRelHeight = dRelWidth; else dRelWidth = dRelHeight; CharRect.left = (rect.Width() - dRelWidth * iTotWidth) / 2; CharRect.top = (rect.Height() - dRelHeight * NORM_DIGIHEIGHT) / 2; } else CharRect.SetRectEmpty(); // Draw all characters... for (CharIterator = m_CharVector.begin(); CharIterator != m_CharVector.end(); CharIterator++) { CharRect.SetRect(CharRect.left, CharRect.top, CharRect.left + dRelWidth * CharIterator->GetNormWidth(), CharRect.top + dRelHeight * NORM_DIGIHEIGHT); CharIterator->Draw(&memDC, CharRect, &OffPen, &OnPen, &hBrushOff, &hBrushOn); CharRect.left += dRelWidth * CharIterator->GetNormWidth(); } // Mama says: Clean up your mess! memDC.SelectObject(pOldPen); memDC.SelectObject(pOldBrush); OffPen.DeleteObject(); OnPen.DeleteObject(); hBrushOff.DeleteObject(); hBrushOn.DeleteObject(); }
void CDSegment::Draw(CDC *pDC, CDoubleRect DrawPlace, int iWidth) const { int i, nBez,b; CPoint * paPoints; double daContr[4]; double *pBezPts; double dRelWidth, dRelHeight; paPoints = new CPoint[m_nCount]; if (paPoints == NULL) return; dRelWidth = DrawPlace.Width() / iWidth; dRelHeight = DrawPlace.Height() / NORM_DIGIHEIGHT; for (i = 0; i < m_nCount; i++) { if (m_paTypes[i] != PT_BEZIERTO) { paPoints[i] = CPoint(DrawPlace.left + dRelWidth * m_paPoints[i].x + 0.5, DrawPlace.top + dRelHeight * m_paPoints[i].y + 0.5); } } for (i = 0; i < m_nCount; i++) { if (m_paTypes[i] == PT_MOVETO) { pDC->MoveTo(paPoints[i]); } else if (m_paTypes[i] == PT_LINETO) { VERIFY(pDC->LineTo(paPoints[i])); } else if (m_paTypes[i] == PT_BEZIERTO) { // Look for the first non-bezier point(This is the EndPoint)... nBez = 0; do { nBez++; } while (m_paTypes[i+nBez] == PT_BEZIERTO); pBezPts = new double[2*(nBez+2)]; for (b = 0; b < (nBez+2)*2; b += 2) { pBezPts[b ] = DrawPlace.left + dRelWidth * m_paPoints[i-1+b/2].x; pBezPts[b+1] = DrawPlace.top + dRelHeight * m_paPoints[i-1+b/2].y; } CalcBezier(pBezPts, 2*(nBez+2), daContr); delete[] pBezPts; paPoints[i ].x = daContr[0] + 0.5; paPoints[i ].y = daContr[1] + 0.5; paPoints[i+1].x = daContr[2] + 0.5; paPoints[i+1].y = daContr[3] + 0.5; paPoints[i+2] = paPoints[i+nBez]; VERIFY(pDC->PolyBezierTo(&paPoints[i], 3)); i += nBez; } } // for delete[] paPoints; }