Идея путей в том путь это набор фигур или форм, которые могут быть объединены для рисования других фигур или для создания областей обрезки. Создается путь путем вызова функции:
CDC::BeginPath BOOL BeginPath( );
Дальше следуют команды, а заканчивается путь вызовом.
CDC::EndPath BOOL EndPath( );
Давайте создадим приложение MFC AppWizard с именем TTestPath как SDI. Естественно, что нас будет интересовать функция OnDraw для работы с CDC.
//////////////////////// // CTestPathView drawing void CTestPathView::OnDraw(CDC* pDC) { CTestPathDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here }
Мы изменим ее для того, что бы с помощью пути задать область обрезки.
/////////////////////////// // CTestPathView drawing void CTestPathView::OnDraw(CDC* pDC) { CTestPathDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->BeginPath(); pDC->MoveTo(CPoint(10,10)); pDC->LineTo(CPoint(100,10)); pDC->LineTo(CPoint(100,100)); pDC->LineTo(CPoint(10,100)); pDC->LineTo(CPoint(10,10)); pDC->EndPath(); pDC->SelectClipPath(RGN_COPY); CPen penRed(PS_SOLID,1,RGB(255,0,0)); CPen *oldPen; oldPen=pDC->SelectObject(&penRed); pDC->Rectangle(CRect(CPoint(10,10),CPoint(100,100))); for (int x=0;x<100;x++) { pDC->MoveTo(10,10); pDC->LineTo(200,x*20); } pDC->SelectObject(oldPen); }
Здесь мы создаем область обрезки в виде прямоугольника, а потом обрисовываем эту область и начинаем заполнять линиями. Результат будет вот такой.