Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Refresh Problem bei Zeichnen von GDI+ Objekten

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
29.07.2005, 17:18 Uhr
Maex0815



Hallo,

ich hab ein Problem mit einer Anwendung, in der ich in einem Dialog GDI+ Objekte (Brushes (Linear Gradient, Path Gradient, Textures) etc.) zeichnen will.

Die zweite Herausforderung ist, wenn ich ein Objekt gezeichnet habe, dann will ich es auch mittels Drag & Drop innerhalb des GDI+ Bereichs verschieben.

Realisiert hab ich das Ganze mittsl eines STL vector<> in dem ich die Rectangles von allen GDI+ Objekten abspeichere und mittels des MouseMove Events abprüfe, ob sich die Maus in einem Objekt befindet und die Linke Taste gehalten ist. Wenn ja, dann verschiebe ich das Objekt mit der Maus.

Soweit so gut. Das Problem, welches ich nun habe ist:

Bedingt durch die Mausbewegung bin ich gezwungen im MouseMove nach dem Neuzeichnen der GDI+ Objekte den ganzen Dialog neu zu zeichnen. Ich muß dazu sagen, es ist auf der Form nix drauf, keine Buttons, keine Frames, nix. Die Steuerung des Dialogs erfolgt komplett über PopUp Menüs.

Mein aktuelles Problem ist, wenn ich eine gewisse Zeit (unregelmäßig lang) über meinem Zeichenbereich GDI+ Objekte verschiebe, dann wird auf einmal der Client Bereich meines Fensters nicht mehr innerhalb des Fensters gezeichnet, sondern beginnend vom Desktop (0/0) aus. Also, wenn ich mein Fenster jetzt rechts unten in der Ecke hab, zeichnet das Ding seinen Client Bereich links oben auf dem Desktop.

Hat jemand solch ein Problem schon mal gehabt ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.07.2005, 19:28 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


evtl haste nen fehler beim zeichnen der dir irgendwann die korrdinaten "verschlupft"
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.07.2005, 12:21 Uhr
Disi



Leider gottes ist das so Komplex das wir nur Raten können woran es liegt.

Aber vielleicht ein Tip am Rande. -> InvalidateRect() <- dort gibst du ein Rect an welches du neu Zeichnen willst, sprich du zeichnest den Bereich um das Verschobene Objekt jedesmal neu wenn es sich um nen Pixel verschoben hat, und dann Invalidaten
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.08.2005, 07:24 Uhr
Maex0815



Danke Euch erstmal für die Antworten.

Zum Neuzeichnen verwende ich schon jedesmal InvalidateRect(). Ich hab das Ganze auch schon mehrmals gedebugged.

Meine Objekte haben die Richtigen Koordinaten und auch das DIalog Rectangle (GetWindowRect ()) wenn ich abfrage scheint die Richtigen Koordinaten zu haben.

Gibt es evtl. irgendwelche Tools vermittels ich das Problem noch näher eingrenzen kann ??

Ich wäre dankbar für jede Art von Hinweisen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.08.2005, 15:45 Uhr
Maex0815



Hallo,

nur falls es Euch interessiert, hab das Problem lösen können.

Es ist ein Performance Problem. Das Thema ist, bedingt durch die Menge an MouseMoves wurden zu viele "Neuzeichnen" Anweisungen an die GDI + übertragen.

Die ist irgendwann mal überfordert gewesen von der ganzen Neuzeichnerei und hat einfach die Rectangles zwischen Client Area und Desktop Ursprung durcheinander geworfen.

Jetzt, solange ich keine Objekte verschiebe, zeichne ich in keinem MouseMove Neu. Zum zweiten hab ich jetzt den Refresh von Hintergrund Brush disabled, solange ich ein Objekt verschiebe und zeichne nur das Objekt neu.

Das hat zur Folge, dass das Objekt jetzt über den Zeichenbereich schliert. Das umgeh ich aber, indem ich bei jeden 25-sten MouseMove Event einen RePaint vom Hintergrund vornehme.

Mit dem Ergebnis bin ich nun zufrieden und laß es jetzt so.

Danke nochmals für Eure gut gemeinten Ratschläge ...

Tschau
Maex0815
 
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: