JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=dfd8e92be84916488cb9344b6df9ec2dMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

InvalidateRect

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
derUnwissende
Mini JLI'ler



Anmeldedatum: 14.11.2002
Beiträge: 32

Medaillen: Keine

BeitragVerfasst am: 05.06.2003, 22:57    Titel: InvalidateRect Antworten mit Zitat

Hi,
hab da ein kleines Problem, und zwar will ich das Fenster bevor ich etwas zeichnen möchte mit InvalidateRect neu zeichnen lassen.
Also z.B. zeichnet man durch Mausklick einen Strich und jetzt soll immer zu beginn von WM_LBUTTONDOWN das Fenster neugezeichnet werden um den alten Strich durch einen neuen zu ersetzen.
Problem ist, obwohl ich InvalidateRect vorm Zeichnen des neuen Objektes aufrufe wird das Fenster nach dem Objekt direkt neugezeichnet.
1. Wollt ich fragen wieso das so is, denn ich rufe ja InvalidateRect zuerst auf und
2. natürlich wie man das ganze richtig macht Wink
Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Starwash3
Mini JLI'ler



Anmeldedatum: 02.06.2003
Beiträge: 4

Medaillen: Keine

BeitragVerfasst am: 06.06.2003, 04:52    Titel: Antworten mit Zitat

Hi,
warum das von dir oben beschriebene Eintritt kann ich nicht sagen, da ich noch nie Probs mit dem erneuern durch Invalidate/InvalidateRect hatte.
Aber wenn es dir darum geht den alten Strich weg zu kriegen und den neuen zu zeichenen dann tue doch folgendes:

    1. ClientRect mit weißen Brush füllen
    1.1 gibt ne WinKonstante für den weißen Brush
    2. neue Linie zeichnen


Den DeviceContext musst du dir natürlich auch holen und wieder freigeben.
Sollte dein Fenster nicht früh genug Aktualisiert werden (wer weiß warum) hilft
    1. UpdateWindow
    (2. ShowWindow)


Gruss Tarek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 06.06.2003, 11:21    Titel: Antworten mit Zitat

Und falls das immer noch nicht hilft, kannst du ja mal etwas Code posten Razz
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
derUnwissende
Mini JLI'ler



Anmeldedatum: 14.11.2002
Beiträge: 32

Medaillen: Keine

BeitragVerfasst am: 06.06.2003, 13:39    Titel: Antworten mit Zitat

So, wollte einfach machen, das vom mittelpunkt M(Xm|Ym) eines winkels ein strich zum mauszeiger geführt wird:
Code:

x=LOWORD(lParam);
y=HIWORD(lParam);

case WM_MOUSEMOVE:
{
   HDC hDC = GetDC(hwnd);
   InvalidateRect(hwnd, 0, TRUE);
   MoveToEx(hDC, Xm, Ym, NULL);
   LineTo(hDC, x, y);
   ReleaseDC(hwnd, HDC);
 }

So, ich dachte mir, wenn jetzt die Maus bewegt wird, wird erst das fenster neu gezeichnet, und danach der strich gezeichnet, und wenn man die maus nicht wieder bewegt sollte dieser ja acuh erstma da bleiben, da das fenster ja erst wieder beim nächstenma neu gezeichnet wird.
Problem is, dass ich den alten strich nich einfach mit weiß überzeichnen, denn dann wird der kreisbogen ja an der schnittstelle auch weiß gezeichnet(in WM_PAINT wird um den Punkt P ein Kreis gezeichnet)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Starwash3
Mini JLI'ler



Anmeldedatum: 02.06.2003
Beiträge: 4

Medaillen: Keine

BeitragVerfasst am: 06.06.2003, 16:17    Titel: Antworten mit Zitat

Hi,
du solltest auch das Rect angeben, dass du Invalidaten willst.

Code:
RECT rcWnd;
GetClientRect(hWnd,&rcWnd);
InvalidateRect(hWnd,&rcWnd,true);
//...


Im MSDN steht zwar dass du Null übergeben kannst, um die gesamte Clientarea zu aktualisieren, aber so sollte es eigentlich auf jeden Fall funktionieren.

Falls du an dieser Stelle immer noch nichts vom Refresh merken solltest kannst du ja immer noch mal das mit UpdateWindow, etc. ausprobieren, nach dem du invalidatet hast.

Gruss Tarek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 06.06.2003, 16:28    Titel: Antworten mit Zitat

Meiner Ansicht nach liegt das Problem vielmehr darin, dass du nicht BeginPaint() und EndPaint() aufrufst. Außerdem würde ich dir empfehlen, dass du das Zeichnen des Striches auch nur in der WM_PAINT-Behandlung machst, und nicht bei WM_MOUSEMOVE.
Du könntest bspw. globale Variablen benutzen, in die du in WM_MOUSEMOVE die Mauskoordinaten speicherst. Danach rufst du InvalidateRect(hwnd,NULL,TRUE) auf.
In WM_PAINT machst du dann, nachdem du BeginPaint() aufgerufen hast und den DC hast, dein MoveTo() und LineTo() und rufst EndPaint() auf.
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
derUnwissende
Mini JLI'ler



Anmeldedatum: 14.11.2002
Beiträge: 32

Medaillen: Keine

BeitragVerfasst am: 07.06.2003, 16:03    Titel: Antworten mit Zitat

Danke,
es geht mit UpdateWindow
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum