Fenstern erweiterte Styles zuweisen

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
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Fenstern erweiterte Styles zuweisen

Beitrag von hardfalcon »

Hallo, falls ihr euch schon mal drüber geärgert habt, dass ihr bei den Flags von OpenWindow() nur einfache Styles zuweisen könnt (also nur solche ohne "EX" im Konstantennamen), dann hab ich hier die Lösung für euer Problem:

Code: Alles auswählen

;Wir erstellen ein ganz normales Fenster mit den Maßen 200x500 (90-60-90 wäre auch gegangen, aber das sieht man nicht so gut bei einer Auflösung von 1280x1024 ;-)
OpenWindow(0,0,0,200,500,#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_SystemMenu,"Toolbox")

;Hier ist der Trick: Mittels SetWindowLong_() weisen wir dem Fenster die erweiterten Styles zu. Das hier
; #GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|
;kann man auch weglassen, dann werden bestehende Flags jedoch
;automatisch gelöscht, sofern sie nicht bei den Flags von
;SetWindowLong_() angegeben sind.
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_TOOLWINDOW)

;Damit das Fenster auch sofort richtig angezeigt wird, gaukeln wir dem Fenster vor, es wäre bewegt worden, indem wir das entsprechende Event auslösen. Wenn man diese Zeile weglässt, muss man das Fenster erst einmal mit der Maus bewegen, damit es richtig gezeichnet wird (am allerwichtigsten ist hier das Flag #SWP_FRAMECHANGED)
SetWindowPos_(WindowID(0),0,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE|#SWP_NOZORDER|#SWP_FRAMECHANGED) 

;Und die Eventschleife...
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Viel Spaß beim experimentieren, und nebenbei gleich mal eine Frage an das PB-Team: warum benutzt ihr eigentlich CreateWindow_() anstatt von CreateWindowEx_() ? :?

so long...
Pascal
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

90-60-90... Ich schmeiß mich (fast) weg...

Der Trick ist ja ziemlich geil... Gibts noch andere Sachen in der Art?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Naja, du kannst halt anstelle von #WS_EX_TOOLWINDOW auch jede andere WindowsAPI-Konstante nehmen, die mit "#WS_EX_" beginnt...
pjanfred
Beiträge: 130
Registriert: 01.03.2006 15:41
Wohnort: Dortmund
Kontaktdaten:

Beitrag von pjanfred »

Is ja kras aber fileicht könten wir ja mal ne Liste von disem
#WS_EX_ befehl erstellen.

#WS_EX_TOOLWINDOW
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

pjanfred hat geschrieben:Is ja kras aber fileicht könten wir ja mal ne Liste von disem
#WS_EX_ befehl erstellen.

#WS_EX_TOOLWINDOW
stehen in jeder API-Hilfe, ansonsten gibt noch den constants-explorer
von Gnozal
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Ich hab da mal gesucht (übersetzt):
#WS_EX_ACCEPTFILES = $10 ;Das Fenster soll Drag
#WS_EX_APPWINDOW = $40000 ;Das Fenster soll in der Taskleiste angezeigt werden
#WS_EX_CLIENTEDGE = $200 ;Das Fenster soll einen Rahmen mit vertieften Rand haben
#WS_EX_CONTEXTHELP = $400 ;Das Hilfesymbol (Fragezeichen) soll in der Titelleisteangeziegt werden
#WS_EX_CONTROLPARENT = $10000 ;Das Fenster soll Kindfenster beinhalten können.
#WS_EX_DLGMODALFRAME = $1 ;Das Fenster soll einen Modalen Dialogframe haben.
#WS_EX_LEFT = $0 ;Das Fenster soll Links ausgerichtet sein
#WS_EX_LEFTSCROLLBAR = $4000 ;Richtet die Scrollleiste Links aus wenn möglich
#WS_EX_LTRREADING = $0 ;Zeigt text von Links nach Rechts an
#WS_EX_MDICHILD = $40 ;Das Fenster ist ein Kindfenster
#WS_EX_NOACTIVATE = $8000000 ;(Win 2000) Das Fenster kann Durch den User nicht in den Vordergrund gebracht werden.
#WS_EX_NOPARENTNOTIFY = $4 ;Das Elternfenster wird nicht über das Erstellen oder Zerstören dieses Fenster benachrichtet
#WS_EX_OVERLAPPEDWINDOW = $300 ;Das Fenster hat einen Ramen eines Standard Fensters
#WS_EX_PALETTEWINDOW = $188 ;Das Fenster hat eine Werkzeugleiste di immer im Vordergrund ist
#WS_EX_RIGHT = $1000 'Das Fenster wird Rechts ausgerichtet
#WS_EX_RIGHTSCROLLBAR = $0 ;Zeigt die Scrollbar wenn vorhanden auf der Rechten seite an
#WS_EX_RTLREADING = $2000 ;Zeigt nach möglichkeit den Text von Rechts nach Links an
#WS_EX_STATICEDGE = $20000 ;Das Fenster hat eine 3D Ramen für gegenstände die keine Benutzereingabe ermöglichen
#WS_EX_TOOLWINDOW = $80 ;Das Fenster hat eine Kleinere Titelleiste
#WS_EX_TOPMOST = $8 'Das Fenster ist immer im Vordergrund
#WS_EX_TRANSPARENT = $20 ;Das Fenster ist Transparent denn es wird erst gezeichnet und dann angezeigt
#WS_EX_WINDOWEDGE = $100 ;Das Fenster hat einen Ramen mit ansteigendem Rand
Quelle: http://www.vbapihelpline.de/index2.php4
pjanfred
Beiträge: 130
Registriert: 01.03.2006 15:41
Wohnort: Dortmund
Kontaktdaten:

Beitrag von pjanfred »

kras
:allright:
Antworten