Originalstift CPen wiederherstellen



  • Hallo

    Ich will ein Gitternetz in grau zeichnen udn danach soll wieder der Originalstift (schwarz) gesetzt werden. Ich mache das derzeit so:

    void CMyGeometryView::draw_grid(CDC* pDC)
    {
    	CPen my_pen(PS_SOLID, 1, RGB(192,192,192));
    	CPen* org_pen = pDC->SelectObject(&my_pen);
    	for(size_t i=0; i<1024; i += grid_space)
    	{
    		pDC->MoveTo(i, 0);
    		pDC->LineTo(i,768);
    	}
    	for(size_t i=0; i< 768; i += grid_space)
    	{
    		pDC->MoveTo(0, i);
    		pDC->LineTo(1024, i);
    	}
    	pDC->SelectObject(&org_pen);
    }
    

    So wie ich es verstanden habe, gibt SelectObject den zuvor gesetzten Typen zurück. Bei mir bleibt aber leider alles grau.
    Diese Funktion rufe ich in OnDraw() auf und danch zeichne ich weiter, aber es bleibt eben alles grau.

    Vielen Dank für eure Hilfe

    chrische



  • Hallo

    Hat keiner von euch eine Idee? Ich dachte, dass sei nur ein kleiner Denkfehler von mir.

    chrische



  • chrische5 schrieb:

    Hat keiner von euch eine Idee? Ich dachte, dass sei nur ein kleiner Denkfehler von mir.

    Isses auch. 😉
    Schau mal genau diese Zeilen an:

    CPen* org_pen = pDC->SelectObject(&my_pen);
    
    pDC->SelectObject(&org_pen);
    

    Was soll das zweite SelectObject denn mit der Adresse des Zeigers auf einen Pen? 😕



  • Hallo

    Ich wusste es 😃

    andere Frage: solche Zeiger muss ich nicht per Hand deleten, weil ich kein new für sie aufgereufen habe. Ist das so richtig?

    chrische


  • Mod

    So ist es. Zeiger, die Du geliefert bekommst entsorgt das System von selbst. Meist sind es temporäre nur Objekte. Speichenr sollte man diese Zeiger deshalb auch nicht.


Anmelden zum Antworten