CDC::DrawDragRect für Kreise?



  • Hi Leute,
    Ich versuche gerade mehr oder weniger verzweifelt eine Funktion für Kreise zu machen, die analog zu CDC::DrawDragRect arbeitet. Also eine Funktion, die so einen gestrichelten Kreis malt. Ich hab mir den Quellcode von DrawDragRect angeschaut, aber der hilft mir nicht weiter, weil er mit CRgn arbeitet und die sind ja bekanntlich viereckig ... Jemand ne Idee?



  • Ok, ok ... Regionen sind nicht nur viereckig ...

    Hier der Code:

    void CCircleOb::DrawDragCircle(CDC* pDC, CRect rect)
    {
    	CBrush *pBrush=NULL;
    	LPCRECT lpRect=rect;
    	SIZE size = CSize(2,2);
    
    	// first, determine the update region and select it
    	CRgn rgnNew;
    	CRgn rgnOutside, rgnInside;
    	rgnOutside.CreateEllipticRgnIndirect(lpRect);
    	rect = *lpRect;
    	rect.InflateRect(-size.cx, -size.cy);
    	rect.IntersectRect(rect, lpRect);
    	rgnInside.CreateEllipticRgnIndirect(rect);
    	rgnNew.CreateEllipticRgn(0,0,0,0);
    	rgnNew.CombineRgn(&rgnOutside, &rgnInside, RGN_XOR);
    
    	CBrush* pBrushOld = NULL;
    	pBrush = CDC::GetHalftoneBrush();
    
    	// draw into the update/new region
    	pDC->SelectClipRgn(&rgnNew);
    	pDC->GetClipBox(&rect);
    	pBrushOld = pDC->SelectObject(pBrush);
    	pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATINVERT);
    
    	// cleanup DC
    	if (pBrushOld != NULL)
    		pDC->SelectObject(pBrushOld);
    	pDC->SelectClipRgn(NULL);
    }
    

Anmelden zum Antworten