Absturz durch Zeiger auf CDC
-
Hallo Kollegen,
folgendes Problem habe ich:
Im einem Fenster sollen 10 Rechtecke in verschiedenen Farben an zufälligen Stellen gemalt werden - und das fortlaufend! Dazu habe ich eine Klasse CFigur angelegt, die das Rechteck beinhaltet! In der Documentenklasse habe ich ein Arrray für 10 Rechtecke angelegt!
Mittels einens Timers in der Ansichtklasse bestimme ich aller ein paar ms neue Farben und Koordinaten für die 10 Rechtecke! Das Fenster wird dann neu gezeichnet! Das klappt auch alles prima, nur nach eineer gewissen Zeit stürzt das Programm ab!
Hier der Code für dads zeichen der Rechtecke (ist in meiner Klasse CFigur enthalten):
void CFigur::Draw()
{CDC *pDc=m_pViewWnd->GetDC();
if (pDc)
{
CBrush NeuerPinsel;
CBrush *AlterPinsel;
NeuerPinsel.CreateSolidBrush(m_Farbe);
AlterPinsel=pDc->SelectObject(&NeuerPinsel);
pDc->Rectangle(obenlinks.x,obenlinks.y,untenrechts.x,untenrechts.y);
pDc->SelectObject(AlterPinsel);
m_pViewWnd->ReleaseDC(pDc);
}
else
{
m_pViewWnd->MessageBox("Konnte keine Zeiger verhaften");
}
}Ich habe nun schon herausbekommen, dass der Aufruf
CDC *pDc=m_pViewWnd->GetDC();
keinen Zeiger auf den DC bekommt! Aber wieseo? Ich gebe den doch immer wieder mit ReleaseDC frei!
Die variable m_pViewWnd ist ein zeiger auf CWnd und wird in der Funktion OnNewDocument an die die Klasse CFigur übergeben!Wer kann nun dazu einen Tip geben!
Danke
-
Verwende bitte CodeTags!
-
void CFigur::Draw() { CDC *pDc=m_pViewWnd->GetDC(); if (pDc) { CBrush NeuerPinsel; CBrush *AlterPinsel; NeuerPinsel.CreateSolidBrush(m_Farbe); AlterPinsel=pDc->SelectObject(&NeuerPinsel); pDc->Rectangle(obenlinks.x,obenlinks.y,untenrechts.x,untenrechts.y); pDc->SelectObject(AlterPinsel); m_pViewWnd->ReleaseDC(pDc); } else { m_pViewWnd->MessageBox("Konnte keine Zeiger verhaften"); } }
edit zum Post unter mir: ja klar is das laör
Is ja DEIN Code nur leserlich gepostet^^
Sehe da keinen Fehler auf anhieb. Könnte auch außerhalb der Fehler passieren, evtl ist das aufrufen in der Dokumentklasse nicht gerade das optimale.
-
Das ist ja klar! Aber wieso bekomme ich den Zeiger nicht?