CDC Problem



  • hallo zusammen,

    habe hier die Member - Funktion Ausgabe()

    void CLiveDlg::Ausgabe()
    {
    CClientDC windowDC(this);
    CDC speicherDC;
    .....
    .....
    speicherDC.TextOut(285,39,s_pos1); // s_pos1 vom Typ CString
    .....
    .....
    windowDC.StretchBlt(0,0,rect.Width(),rect.Height(),
    &speicherDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    }

    Also im Grunde den CDC speicherDC der erstellt wird und an einer gewissen
    Position einfach einen Text bekommt und dann an das Dialog ausgibt.

    nun ist mein Problem das , wenn ich s_pos1 ändere und die Funktion
    Ausgabe() nochmals ausführe der vorherige Text noch zu sehen ist
    und der neue Text einfach darüber geschrieben wird.
    Also irgendwie bleibt der " alte " CDC erhalten . Hab es mit speicherDC.DeleteDC() versucht und trotzdem wird der Text überschrieben.

    Wo liegt das Problem ?
    Hat jemand eine Idee ?

    Danke schön



  • Ich hab ne Idee und weiss auch genau wo dein Problem liegt, mich wundert das das dir noch keine Seitenefekte aufgefallen sind, oder rufst du ausgabe in der OnPaint() deines Dialoges auf? Denn das is die einzige stelle wo gezeichnet wird, wenn du das selbst auf einene Faust machst, kommen ganz sonderbare Effekte zu Tage oder hast du schon mal deinen Dialog außerhalb des sichtbaren bereiches und wieder zurück verschoben?. Also verschieb den Aufruf von Ausgabe() in die OnPaint() und erzwinge das neuzeichnen mit invalidate().

    So sollte erstmal weiter helfen



  • Ich habe das Problem gelöst .
    Nun hatte ich wie du gesagt hast die Ausgabe in der OnPaint().

    Das Problem war aber , das ich vor dem " speicherDC.TextOut(285,39,s_pos1) "
    ersteinmal ein Hintergrundbild reingeladen habe, mit

    speicherDC.SelectObject(&cb_hintergrund); // cb_hintergrund vom Typ CBitmap
    und im Oninit mit einer
    Hintergrund Ressource
    mit LoadBitmap eingeladen.
    So nun kam das "speicherDC.TextOut(285,39,s_pos1)" und jetzt
    wurde nicht nur der speicherDC geändert sondern auch das cb_hintergrund

    also wurde das so gennante Hintergrund Bild immer überschrieben !
    habe ich einfach gelöst indem ich am Anfang der Ausgabe Funktion einfach immer wieder das alte Hintergrundbild mit LoadBitmap einfüge..

    Danke schön



  • na gut die Problematik konnte ich so net sehen, da waren die infos zu wenig, aber mal noch ne anmerkung, warum erstellst du keinen CDC für dein Hintergrundbild und blittest in deinen SpeicherDC alles zusammen und zum schluß alles aus den SpeicherDC in deinen DialogDC kannste dir das ständige nachlagen erspaaren, nur mal so als Idee.


Anmelden zum Antworten