Fenster Vista-like schließen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hatte auch vor, diese beiden Befehle zu benutzen. Sorry, bin noch nicht dazu gekommen, weiterzumachen. Werde ich aber noch tun.
Meinst du, mitdieser Methode kann ich über alle Gadgets drübermalen?
P.S.: Ich will keinen OpenWindowedScreen() benutzen, sondern einfach nur WindowOutput().
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Du kannst auch mit 'EnumChildWindow_()' alle Childs des Fenster ermitteln
und mit 'PostMessage_()' oder einem Destroy schließen. Dann ist auch nichts
mehr im Fenster. Allerdings könnte man das evtl. sehen, wenn es viele
Gadgets sind, die geschlossen werden müssen.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kann ich DestroyWindow_() benutzen? Ich muss gestehen, ich werde nicht wirklich schlau aus dem, was die MSDN da sagt:
DestroyWindow Function

The DestroyWindow function destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages to the window to deactivate it and remove the keyboard focus from it. The function also destroys the window's menu, flushes the thread message queue, destroys timers, removes clipboard ownership, and breaks the clipboard viewer chain (if the window is at the top of the viewer chain).

If the specified window is a parent or owner window, DestroyWindow automatically destroys the associated child or owned windows when it destroys the parent or owner window. The function first destroys child or owned windows, and then it destroys the parent or owner window.
hab das Gefühl, das ist nicht meine Funktion oder etwa doch?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Das ist schon die richtige Funktion aber nicht für PB Gadgets. Diese werden auf bestimmte Art und Weise erstellt und ebenso wieder entfernt. Du solltest DestroyWindow() deshalb nur für mittels API erstellte Fenster benutzen. Es gibt im Englischen Forum einige Codes die zeigen wie man das macht.

[edit]
Warum überhaupt die Gadgets löschen? Verstecken geht auch.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Vom Prinzip hast du schon Recht, verstecken geht auch. Aber wie?
Mir geht es darum, dass der Screenshot vom zu schließenden Fenster in das Fenster gemalt werden soll. Soweit wisst ihr das ja.

Genauer: Ich werde DrawImage() benutzen, was mir Echtzeit-Resizing des Bildes ermöglicht. So sieht es dann aus, als würden die gadgets mit-resized. Allerdings habe ich die Erfahrung gemacht, dass wenn ich auf ein Fenster male, das Gemalte immer hinter den Gadgets landet. Das bedeutet, die Gadgets müssen weg. Nur wie? Ich tendiere eher zu löschen, weil mit einem CloseWindow() die Gadgets sowieso gelöscht werden. Aber meinetwegen kann ich sie auch verstecken.

Ich möchte meine Prozedur wie immer so universell einsetzbar wie möglich gestalten, das heißt der Programmier kopiert sie in sein Proggie und gut ist. Meine Proc soll sich um alles weitere kümmern, das heißt sie muss irgendwie an die Gadgets kommen.
Natürlich könnte ich von 0-9999 mit einer For-Schleife durchmarschieren und per isGadget() testen. Das dauert aber zu lange, ist unprofessionell und deckt den Fall #PB_Any-Gadget AFAIK nicht ab (mir scheint, diese haben irgendwelche anderen IDs...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Optimalste Lösung:
1. neues Fenster fürs Image erstellen und über das Richtige positionieren
2. richtiges Fenster verstecken
3. deine Animation laufen lassen
4. beide Fenster schließen

so verlierst du auch keine Zeit während des zerstörens des richtigen
Fensters :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Fenster Vista-like schließen
ne 45er in den Rechner halten und abdrücken....
oder...

Code: Alles auswählen

KillThread(FindThread("Leerlaufprozess"))
*puit*
....funzt latürnich nicht, aber scnr.....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten