Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Dialogfensterinhalt verschwindet nach Zeichnen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.02.2006, 19:17 Uhr
~Flapsi01
Gast


Hallo,

folgendes Problem:

Ich habe in einer dialogbasierten Anwendung ein weitere Klasse von CDialog abgeleitet, die mir ein neues Dialogfenster anzeigt. Wenn ich auf diesem mit TextOut(...) schreibe, oder Linien zeichne sieht alles erst mal normal aus. Wenn dann allerdings die Zeichenroutine verlassen wird und das Programm ins MFC-Nirwana zurückspringt, wird der Fensterinhalt gelöscht und ich habe ein leeres Dialogfenster vorliegen.

Woran liegt das und wie kann man das vermeiden ??

P.S. Ich hole mir zuerst mit ::GetDC das DeviceHandle und spanne dann mit CDC::FromHandle die Zeichenleinwand auf...


Beste Grüße

Flapsi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.02.2006, 23:06 Uhr
mmc20
puss in boots


hi, wo genau (im programm) zeichnest du auf deinen dialog?

solche sachen sollte man in OnPaint(...) bzw OnDraw(...) erledigen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.02.2006, 08:38 Uhr
~Flapsi01
Gast


Ich habe in meinem 2. Dialogfenster eine OnPaint-Routine eingefügt und zeichne dort. Das lustige (oder traurige) ist, das nach jedem zeichnen (auch von OnPaint aus) der Fensterinhalt verschwindet. Ich habe keine versprengten Invalidate oder ReDrawWindow Anweisungen in meinem Programm.

Ist es eigentlich erlaubt, einen Zeiger auf den Bildschirmkontext (z.B pDC) von OnPaint aus an eine Funktion zu übergeben und dort zu zeichnen (weil ich das in meinem Prog häufiger mache) ?:


C++:
void SubTest(CPaintDC* pDC){
   pDC->TextOut(20,20,"Subtest");
}


CTest::OnPaint(){
    CPaintDC* pDC;
    pDC=&dc;
    pDC->TextOut(0,0,"Test");
    SubTest(pDC);
}



Gruß

Flapsi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.02.2006, 08:40 Uhr
~Flapsi01
Gast


Sorry, Quelltext falsch gepostet:

[cpp]
void SubTest(CPaintDC* pDC){
pDC->TextOut(20,20,"Subtest");
}


CTest::OnPaint(){
CPaintDC dc(GetDlgItem(IDC_Monitor));
CPaintDC* pDC;
pDC=&dc;
pDC->TextOut(0,0,"Test");
SubTest(pDC);
}
[cpp/]

So isser im Original.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.02.2006, 10:50 Uhr
mmc20
puss in boots


hi, hol dir den dc doch erst in der function wo du ihn brauchst, da GetDlgItem ein temporäres CWnd zurückgibt kann das in die hose gehen.
ausserdem solltest du bevor du zeichnest erstmal die default-onpaint aufrufen.

C++:
void SubTest()
{
    CPaintDC dc(GetDlgItem(IDC_MONITOR));
    CRect rect(20,20,100,100);
    dc.DrawText( _T("Testtext"), -1, rect, DT_CENTER );
}

CTest::OnPaint()
{
    if ( !IsIconic() ) {
        CDialog::OnPaint();
        SubTest();
    }
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.02.2006, 12:56 Uhr
~Flapsi01
Gast


Ganz vielen Dank !

Habe es gemacht wie oben beschrieben und es klappt.

Schönes Wochenende

Flapsi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: