PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [MFC] GDI Zeichnung verdeckt Steuerelemente


Gast
2006-07-26, 19:53:50
hi,

ich hab eine dialog anwendung mit gdi zeichnungen die so wie es sein soll dargestellt wird. wenn ich mit einem anderen fenster drüberfahre verschwinden die steuerelemente, sind aber nocht aktiv und anwählbar. minimiere ich das fenster und maximiere es wieder sind sie wieder sichtbar.

was ist der unterschied wenn beim neuzeichnen nur ein anderes fenster drüberfährt oder das fenster wieder maximiert wird. die zeichnungen sind in einer eigenen funktion, werden aber durch onpaint aufgerufen.

Gast
2006-07-26, 22:10:25
also habe ich das richtig verstanden, du hast zwei Fenster A und B, A mit GDI-Zeichnungen und B mit Steuerelementen, und wenn Fenster B Fenster A verdeckt, ist die GDI-Zeichnung von Fenster A auf Fenster B zu sehen, und die Steuerelemente von Fenster B werden dadurch verdeckt?

So was kann auftreten, wenn mit dem Device Context in den du zeichnest was nicht stimmt. Bist du sicher, daß es der von Fenster A ist? Und nicht etwa der des Desktop? Bist du sicher, daß du für Fenster A einen angefordert hast? Forderst du ihn mit GetDC() an? Oder mit CPaintDC? Gibst du ihn nach jeder Anforderung auch irgendwann wieder frei?

Gast
2006-07-27, 11:18:32
es ist ein dialogfenster in dem gezeichnet wird, in diesem befinden sich auch die steuerelemente. den device context hol ich mir mit CClientDC dc(this); und die funktionen zum zeichnen werden in onPaint aufgerufen.

wenn ich mit einem anderen fenster, egal welchem, über mein dialogfenster fahre, verschwinden die steuerelemente hinter einem rechteck das ich gezeichnet habe. die steuerelemente sind aber noch ansteuerbar. minimiere und maximiere ich das fenster erscheinen die steuerelemente wieder.

Gast
2006-07-27, 12:48:27
also du machst in deinem Fenster eine Zeichnung, die die in diesem Fenster befindlichen Steuerelemente überdeckt?
Ich glaube das dürfte ziemlich miteinander kollidieren. Wozu soll das gut sein?

Gast
2006-07-27, 14:47:25
beim start sind die steuerelemente auch über der zeichnung .. wie es gewollt ist. es ist ein teil der gestaltung des dialogfensters, der inhalt soll durch einen anderen hintergrund von der dialogfenster farbe getrennt werden.

Gast
2006-07-27, 20:38:49
das erinnert mich an eine Methode, mit der ein Arbeitskollege mal die Hintegrundfarbe eines Dialogfeldes verändern wollte:
In der OnPaint()-Routine des Dialoges einen CPaintDC angefordert und mit diesem ein Rechteck der gewünschten Farbe in der Größe des Dialogfeld-Clients gemalt. Sämtliche Steuerelemente, einschließlich Static-Controls (die eigentlich die Farbe des Hintergrundes haben sollten) blieben unbedeckt, also wurden nicht mitgefärbt.

Deswegen wäre meine Idee, daß du es mal mit einem CPaintDC versuchen solltest. Und die Zeichenroutine auch wirklich nur in OnPaint() aufrufst. Falls es notwendig sein sollte, die Routine manuell anzustoßen, solltest du dies mit RedrawWindow() tun, das stellt sicher daß alles über OnPaint() läuft.

Gast
2006-07-28, 10:36:17
danke

das zeichnen direkt in OnPaint mit CPaintDC hat geholfen.