Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.03.2006, 14:39

[WinAPI] FEnster in Vordergrund

Hiho!

Kann mir jemand von euch sagen, welche Messenges, Funktionen etc. aufgerufen werden, wenn man ein Fenster, das minimiert ist, oder im Hintergrund war, aufruft, also in den Vordergrund als aktuell aktives Fenster nimmt?

Weil genausoetwas möchte ich simulieren, weil dann irgendwie der Inhalt des Fensters genau so gezeigt wird, wie ich das will ...

Also ich weiß, dass eine WM_PAINT und eine WM_SIZE Message geschickt werden, aber was noch?

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

2

05.03.2006, 14:40

WM_ACTIVATE mit lParam auf WA_INACTIVE wenns nicht aktiv ist, sonst ist es aktiv
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

3

05.03.2006, 14:53

hm, danke!

Aber irgendwie "reicht" das noch nciht, also das Fenster macht immernochnciht genau das, was es macht, wenn es minimiert und dann wieer aktiviert wird!

und muss man dieses WA_INACTIVE / etc nciht als wParam eintragen: http://www.google.com/search?client=opera&rls=en&q=WM_ACTIVATE&sourceid=opera&ie=utf-8&oe=utf-8

Anonymous

unregistriert

4

05.03.2006, 15:13

Zur Hilfe über die WinAPI sollte man auf Google pfeifen und auf MSDN gehen bzw. Windows Live!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

05.03.2006, 15:48

C-/C++-Quelltext

1
2
3
4
5
        case WM_ACTIVATE:
            if(WA_INACTIVE == LOWORD(WParam))
                PostMessage(NULL, WM_APP+1, true, NULL);
            else
                PostMessage(NULL, WM_APP+1, false, NULL);


So gehts, wobei du natürlich die PostMessage Funktionen ersetzen solltest.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

6

05.03.2006, 16:58

Hallo!

@ nix da: Da hatte ich den falschen Link in der zwischenablage, wollte eigentl. auf das den MSDN-Inhalt verlinken: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputmessages/wm_activate.asp

@ nox, was soll denn da passieren?

Ich glaube ich erklär mal mein Problem exakt am Beispiel, also padup: :D
so sieht das aus, wenn ich in der ersten Runde, ganz normal spiele, hier wird mit der GDI-Funktion "TextOut()" Text, also die erreichten Punkte,auf den Hintergrund geschrieben:
http://www.sro.at/bildupload/images/12-01.jpg
So, wenn ich jetzt ein neues Spiel beginne, dann werden halt die ganzen Daten zurückgesetzt etc. und eine WM_PAINT-Nachricht geschickt, aber das, was vorher mit "TextOut()" geschrieben wurde ist noch da, bzw. wurde halb überschrieben:
http://www.sro.at/bildupload/images/4-02.jpg
Wenn ich jetzt das Fenster minimiere und wieder maximiere, dann siehts perfekt aus, so, wie ich das will, das Fenster wird halt irgendwie upgedated, aber ich weiß halt net wie, guckst du:
http://www.sro.at/bildupload/images/4-03.jpg
So, und dann hatte ich noch die Idee, dass ich einfach ein weißes Rechteck über den Bldschirm male und dann das Hintergrundpic drüber, und dann könnte ja die Schrift auch weg sein, aber dann passiert das hier, und das is ganz doof *weinz* (das Hintergrundbild wird mehr oder weniger ignoriert!:
http://www.sro.at/bildupload/images/3-04.jpg

Und noch ne Idee hatte ich *g*, nähmlich einfach Rechtecke (mit "Rectangle()" über die speziellen Bereiche drüber malen, aber dann haben diese Rechtecke so nen schwarzen Rand, und das sieht auch ncith prikelnd aus ...

Ach ja, wenn ich dann bei der neuen Runde zusätzlich zu der WM_PAINT noch ne WM_CREATE auf den Weg schicken, dann sieht mein Fenster auch wieder prima aus, wie auf dem 3en Pic zu sehen ist, aer dann grieg ich irgendwie probs mit der Zuwaisung der Fenster zu den CommonControls, also irgendwie werden dann Haken angezeigt und mal nciht, aber is ja auch irendwie verständlich, wenn das Control 2 mal erstellt wurde ...

Irgendwie wird halt das Fenster nciht aktualisiert, wie es beim Maximieren/Minimiren der Fall ist, und deshalb wollte ich diesen Vorgang imitieren! Und wenn halt so ne Message mit WM_ACTIVATE sende, dann passiert da mehr oder weiger auch nüschts, also ich fange diese Message nirgends ab ...

Vielen Vielen Dank!

ThomasS

Frischling

Beiträge: 50

Wohnort: Landshut

Beruf: Student

  • Private Nachricht senden

7

06.03.2006, 16:48

Um ein Fenster zu aktualisieren (ohne es zu Minimieren):

UpdateWindow
http://msdn.microsoft.com/library/defaul…ntdraw_4zef.asp

8

06.03.2006, 16:49

Hat keiner eine Idee, wie er mir helfen könnte, auch kleine Tipps könnten mir helfen!

Oder wenigsten, wie ich irgendwie diese geschriebenen Dinge "weg" bekomme, wenn ich sie ncihtmehr will, also die hier: http://www.sro.at/bildupload/images/12-01.jpg

Braucht ihr Quellcode, oder wollte ihr sonst irgendwas wissen?

Danke @Thomas S, hab deinen Beitrag zu spät gelesen, aber dieses UpdateWindow hilft auch nicht, passiert irgendwie nüschts ... Wird das denn aufgerufen, wenn ein Fenster maximiert wird?

ThomasS

Frischling

Beiträge: 50

Wohnort: Landshut

Beruf: Student

  • Private Nachricht senden

9

07.03.2006, 16:41

Zitat

Wird das denn aufgerufen, wenn ein Fenster maximiert wird?

Ich dachte eigentlich, schon ...

Anderer Ansatz: Wenn du vor dem TextOut nur die betroffenen Bereiche mit FillRect löschst, sollte der alte Text verschwinden.

10

07.03.2006, 17:41

Dankeschön, also ich habs jetzt mit der Funktion InvalidateRect(); in Verbindung mit deiner UpdateWindow-Funktion hinbekommen, das Fenster wird genausodargestellt, wie es nach maximieren, minimieren aussieht!

Und deine FillRectfunktion könnte mir auch helfen, weil dann kann ich ja einen weißen Brush nehmen und dann sollte das auch funzen!

Mercy beaucoup!

Werbeanzeige