Maximieren "abfangen"

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

flona

Betreff: Maximieren "abfangen"

BeitragDi, Jul 31, 2007 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hy, alle zusammen.
Ich hab mal wieder ne Frage. Und zwar:
Kann man das Maximieren eines Fensters "abfangen"?
Also ich möchte ein Fenster, das nur auf Minimieren und Schließen reagiert und den Maximieren-Button entweder gar nicht erst anzeigt oder zumindest nicht darauf reagiert. Ich hab da schon was probiert:
Code: [AUSKLAPPEN]
win=CreateWindow("",0,0,420,243,Desktop(),3)
Repeat
;1.If WindowMaximized(win) Then RestoreWindow win
Select WaitEvent()
;2.Case $802 RestoreWindow win
Case $803 End
End Select
Forever

Es funktioniert auch, aber der Bildschirm flackert kurz Sad , weil das Fenster ja schon maximiert ist und dann wieder geschlossen wird.
Weiß jemand ob und wenn ja wie man maximieren "abfängt"? Mit dll?
mfg
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit
 

ChristianK

BeitragMi, Aug 01, 2007 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du beim letzten Parameter von CreateWindow "1" angibst, wird kein Maximieren-Button erstellt. Dann lässt sich das Fenster aber auch nicht
vergrössern / verkleinern.

Wenn du das trotzdem willst, wird es etwas komplizierter ...
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Silver_Knee

BeitragMi, Aug 01, 2007 1:17
Antworten mit Zitat
Benutzer-Profile anzeigen
mach doch n manuellen minimieren button so alla createbutton("",x,y,20,20)

flona

BeitragMi, Aug 01, 2007 9:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich brauche den Minimieren und Schließen Button. Von einem manuellen Button halte ich eher weniger, da das Programm nur wenig Platz einnehmen darf.(Ist eh schon zu groß)
Gibt es keine anderen Möglichkeiten?
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit
 

ChristianK

BeitragMi, Aug 01, 2007 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, aber dafür muss man etwas tiefer in die WinAPI-Trickkiste greifen.

Ich konnte es nur mit BlitzMax testen, weil ich kein BlitzPlus habe.
Hier ein umgeschriebenes Beispiel:

Code: [AUSKLAPPEN]
Function AddMinimizeButton( win, title$ )
   Local hwnd = QueryObject( win, 1 )
   
   Local style = GetWindowLongA( hwnd, -16 )
   SetWindowLong( hwnd, -16, style + $00020000 )
   
   ' Titelleiste neu zeichnen
   SetGadgetText( win, title$ )
End Function

Das Fenster muss vorher mit dem Style "1" erstellt worden sein! Dann wird der Minimieren-Button hinzugefügt. Der Maximieren-Button ist deaktiviert.
Leider musst du noch die Beschriftung des Fensters mit angeben, damit es neu gezeichnet wird und die Änderungen sichtbar werden.

Vielleicht kennt hier jemand eine bessere Möglichkeit die Titelleiste des Fensters neu zu zeichnen ...

Edit:

Ach ja, du musst noch eine "user32.decls"-Datei im userlibs-Ordner des BlitzPlus Verzeichnisses erstellen. Inhalt:

Code: [AUSKLAPPEN]
.lib "user32.dll"
GetWindowLongA%( hwnd%, long% )
SetWindowLongA%( hwnd%, long%, newlong% )
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

flona

BeitragMi, Aug 01, 2007 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ProGamer.Coder.
Funktionierte nach kleiner Änderung super. Very Happy
Hast bei
Code: [AUSKLAPPEN]
SetWindowLong

"A" vergessen, aber nochmal danke.
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group