Clipping-Problem...



  • hallo liebe Coder,

    ich habe bei einer OnPaint Handler ein retangle angelegt, indem gezeichnet werden soll. Nun möchte ich aber noch im selben aufruf die hälfte der restlichen zeichnungen in einem bestimmten bereich zeichnen lassen, der definitiv kleiner ist als mein jetziger...

    hier ein paar erfolgslose ideen bisher:

    void CGraph::OnPaint()
    {
    	if ( !m_nXY || !m_xy )
    	{
    		CWnd::OnPaint();
    		return;
    	}
    	CPaintDC dc(this); 
    
    	CRect rcClient ;
    
            CRect clipRect(0, 0, 200, 100);
    
            dc.SetClip(clipRect); // Funktioniert nicht!
    
    	GetClientRect(&rcClient);
    

    oder auch hier etwas:

    CRect rcClient ;
    
    	CPoint rect_topleft , rect_bottomright ; 
    
            // Ecken zwischenspeichern
    	rect_topleft		= rcClient.TopLeft();
    	rect_bottomright	= rcClient.BottomRight();
    
    	// Zeichenbereich verkleinern ( ecken verändern)
    	rect_topleft.x += 100;
    	rect_topleft.y += 100;
    	rect_bottomright.x -= 100;
    	rect_bottomright.y -= 100;
    
    	rcClient.TopLeft() = rect_topleft;
    	rcClient.BottomRight() = rect_bottomright;
    
    	GetClientRect(&rcClient);
    

  • Mod

    Ich verstehe nicht was Du willst. Ein Clip-Rect verkleinert nichts. Es begrenzt nur die Ausgabe. Sprich: Es erzeugt einen Bereich in den Du Zeichnen kanst und der Rest wird geclippt (also ignoriert).



  • genau....

    mein retangle soll schon so bleiben wie es ist...

    habe jetzt eine funktion gefunden, mit der ich einen bestimmten bereich zeichnen lassen kann....

    // Regionsbestimmung
    	region.CreateRectRgn	(	m_border ,
    								m_border ,
    								(rcClient.Width() - (m_border)) ,
    								(rcClient.Height() - (m_border))
    							);
    
    	// Region Geltend machen
    	dc.SelectClipRgn (&region);
    

    wenn kann ich das wieder abstellen, ohne die OnPaint-Methode zu verlassen?
    vielen dank...


  • Mod

    EInfach alte Clip-Region hlen, bevor Du die neue setzt und dann die alte wieder setzen. GetClipRgn/SetClipRgn


Anmelden zum Antworten