?
An Pellaeon:
Vielen Dank für die Erklärung.
Ich hätte noch eine Frage: In einem Tutorial, wo Blitten mit transparenter Hintergrundfarbe beschrieben wurde (www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel9.htm), wurden, um das zu ermöglichen, eine ganze Reihe von Device Contexten angelegt. In diese wurden dann neu erstellte bzw. aus Ressourcen kommende Bitmaps geladen. Nun ist es ja so, daß die Funktion CDC::SelectObject (CBitmap *pBitmap) einen Zeiger auf das Bitmapobjekt zurückliefert, das vorher im DC war. Der Ersteller hat diesen Wert jedesmal gespeichert und ihn kurz vor Beendigung der Funktion wieder dem DC zugewiesen.
Also, am Beispiel eines der Device Contexte:
void CDlg::OnPaint ()
{
//...
CDC TempDC;
TempDC.CreateCompatibleDC (pDC);
CBitmap TempBitmap;
TempBitmap.CreateCompatibleBitmap (&SpeicherDC, bm.bmWidth, bm.bmHeight);
CBitmap *pOldTempBitmap=TempDC.SelectObject (&TempBitmap);
//...
TempDC.SelectObject (pOldTempBitmap);
//...
CDialog::OnPaint ();
}
Gibt es dafür irgendeinen praktischen Grund? Die Funktion ist doch sowieso danach vorbei und das Objekt gelöscht. Wieso bringt man den DC nochmal in den Ursprungszustand? Ist das notwendig oder nur eine Vorliebe des Autors? Wer kennt sich damit aus?