Fenster über den ganzen Bildschirm erstellen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Der Eisvogel

Betreff: Fenster über den ganzen Bildschirm erstellen

BeitragMi, Jul 28, 2010 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
Ich würde gerne ein Fenster erstellen, das über den ganzen Bildschirm geht. Wie ich die Auflösung ermittle weis ich schon. Aber irgendwie wird bei meinem Fenster immer etwas in der Höhe abgezogen.

Also ich habe eine Auflösung von 1280x1024, aber ich wenn ich ein solches Fenster erstellen will, bekomme ich nur eines mit 1280*1012. das ist nervig, weil dann immer so ein doofer Streifen von Window noch zu sehen ist. Wie kann ich es anstellen, dass dieses Fenster dann auch tatsächlich 1280x1024 groß ist?
Ich habe auch keine Scheu vor der WinAPI, da ich sie eh schon für die Auflösung benutze.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Eingeproggt

BeitragMi, Jul 28, 2010 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Befasse mich auch grad damit Smile

Wenn du mit GetMonitorInfo arbeiten willst dann würde das so gehen:

Du übergibst als MonitorInfo-Struktur eine Bank mit der Größe 40 - und schreibst als Integer zuerst mal bei Offset 0 "40" rein ("DWORD cbSize;").

Dann hast du in den der ersten Rect-Struktur die Abmessungen die du suchst und in der zweiten die die du derzeit haben dürftest.
Auf die Rect Struktu kannst du zugreifen indem du einfach aus deiner Blitz-Bank 4 Integers nacheinander ausliest (Bei Offset 4,8,12 und 16, da 0 ja die Größe der Bank ist)

Du musst dazu noch ein Monitor-Handle angeben, welches ich mit MonitorFromRect ermittle. Ich würde selber gern an dieser Stelle wissen ob es ein besseres Mittel gibt, weil irgendwie kommt mir mein Vorgehen blöd vor... aber MonitorEnumProc will eine Callback-Funktion die ja in BB nicht möglich ist.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Der Eisvogel

BeitragMi, Jul 28, 2010 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, da bekomme ich nicht das was ich will. Ich will ein Fenster erstellen, das der aktuellen Auflösung des Bildschirms gleicht. Aber das geht, nicht weil mein Fenster automatisch verkleinert wird. Das werde ich dann wahrscheinlich mit deiner Methode rausbekommen. Aber das bringt mich nicht zu meinem Ziel Wink
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Eingeproggt

BeitragMi, Jul 28, 2010 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn ich bei einer Bildschirmauflösung von 1280*1024 ein Graphics Fenster mit eben dieser Größe erstelle, so überdeckt es die Windows-Taskbar.
Allerdings hat man dann oben noch die Fensterleiste von BB.
Ich hab ein wenig rumgespielt, aber mehr probiet als geforscht - möglicherweise musst du die Höhe der Windows-Titelleiste noch zum Graphics-Bereich dazu addieren und / oder die Höhe der Taskbar die man ja aus der Differenz der beiden MonitorInfo-Abmessungen kriegen würde.

Hab das jetzt nicht selber probiert, nur so n Verdacht der mir beim "rumspielen" gekommen ist.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Der Eisvogel

BeitragMi, Jul 28, 2010 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh, ich glaube du verstehst das problem nicht so ganz. Wenn ich in meinem Code folgendes schreibe:
BlitzBasic: [AUSKLAPPEN]
Graphics 1280,1024

dann bekomme ich nur ein Fenster mit 1280*1012.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Eingeproggt

BeitragMi, Jul 28, 2010 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Das verstehe ich in der Tat nicht - denn wie im vorigen Beitrag geschrieben: Bei mir ist das nicht so? Confused
Sorry, dann muss ich aussteigen Sad

EDIT:
Wirklich gut dass ich da ausgestiegen bin...
Von dem Problem wußte ich ja gar nix - bei meinem WinXP gehts wie geschildert. Und ich kann hier auch Fenster erstellen so groß ich sie haben will, größerals der Desktop. Sinn macht das natürlich keinen aber bei mir ginge das.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
  • Zuletzt bearbeitet von Eingeproggt am Do, Jul 29, 2010 15:30, insgesamt einmal bearbeitet

Der Eisvogel

BeitragMi, Jul 28, 2010 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Welches Betriebsystem hast du? Ich hab Windows 7. Vielleicht liegt das daran.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

ZaP

BeitragMi, Jul 28, 2010 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube, die meisten Spiele machen erstellen ein Fenster ohne den Fensterrand. Ich weiß jetzt aber nicht ob und wie das mit der WinAPI geht.
Starfare: Worklog, Website (download)

Der Eisvogel

BeitragMi, Jul 28, 2010 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist garnicht das Problem. Wie das geht weis ich. Mein Problem ist, dass ich keine Fenster erstellt bekomme, dass 1280x1024 ist. Es ist maximal 1280x1012. Warum weis ich nicht. Egal welchen Wer >1012 ich bei height angebe.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

ZaP

BeitragMi, Jul 28, 2010 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe dein Problem. Interessanterweise ist der Backbuffer nach wie vor 1280x1024 Pixel groß (ist meine maximale Auflösung) aber das Fenster ist in der Tat zu klein.
Starfare: Worklog, Website (download)
 

Omenaton_2

BeitragDo, Jul 29, 2010 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Komisches Problem, von sowas habe ich noch nie was gehört und würde mich ungemein stören.
Bei mir ist ein Fenster immer genauso groß, wie ich es einstelle:
Graphics3D 1280, 1024 , 32, 1
Kann das sein, daß du vergessen hast den Flag (1) für Fullscreen anzugeben ?

ZaP

BeitragDo, Jul 29, 2010 10:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Na ich glaube, da wäre er von selbst drauf gekommen Wink
Es geht darum, ein Fenster zu erstellen, was die Größe der Desktopauflösung hat; Versuch das doch auch mal, da fehlt wirklich unten was am Fenster.
Starfare: Worklog, Website (download)

Chester

BeitragDo, Jul 29, 2010 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Huch, war eben wirklich überrascht, dass da wirklich immer 12 Pixel fehlen.

Die einzige Möglichkeit diese Größe zu erreichen ist, wenn das Fenster ohne Titelleiste und Rahmen erstellt wird ( SetWindowLong(hWnd, GWL_STYLE , NULL) ). Da AFAIK die maximale Fenstergröße durch die Desktopgröße vorgegeben wird.

Man müsste dem Programm also eine falsche Desktopgröße vorgaukeln.
 

Rufus Serano

BeitragFr, Jul 30, 2010 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Selbiges Problem hatte ich auch schonmal, hier die Lösung, zu der ich gekommen bin:

Code: [AUSKLAPPEN]
;Win32 Consts
Const GWL_STYLE = -16

Const WS_CAPTION = $C00000
Const WS_THICKFRAME = $40000

Const HWND_TOP = 0

Const SWP_NOZORDER = $4

;Win32 Types
Type APIRect
   Field Top
   Field Left
   Field Right
   Field Bottom
End Type

;'Fake'-Fullscreen
Function InitWindow()
   
   ;Int
   Local Fn_ScreenWidth,Fn_ScreenHeight
   Local Fn_Style,Fn_ExStyle,Fn_HWND
   
   ;APIRect
   Local Fn_Window.APIRect
   
   ;get Desktopwindow dimensions
   Fn_Window.APIRect=New APIRect
   api_GetClientRect(api_GetDesktopWindow(),Fn_Window.APIRect)
   Fn_ScreenWidth=Fn_Window\Right
   Fn_ScreenHeight=Fn_Window\Bottom
   Delete Fn_Window.APIRect
   
   ;set windowsize and graphicsmode 3
   Graphics Fn_ScreenWidth,Fn_ScreenHeight,0,3
   
   ;change windowstyle
   Fn_HWND=SystemProperty("AppHWND")
   Fn_Style=api_GetWindowLong(Fn_HWND,GWL_STYLE)
   Fn_Style=Fn_Style Xor WS_THICKFRAME Xor WS_CAPTION
   api_SetWindowLong(Fn_HWND,GWL_STYLE,Fn_Style)
   
   ;move and resize window
   api_SetWindowPos(Fn_HWND,HWND_TOP,0,0,Fn_ScreenWidth,Fn_ScreenHeight,SWP_NOZORDER)
   
   ;Done :)
   
End Function


;Demonstration
InitWindow()
Color 255,255,255
Rect 0,0,GraphicsWidth(),GraphicsHeight(),0
WaitKey
End


Wichtig hierbei ist vor Allem der Graphicsmode 3, sonst kann man SetWindowPos nicht benutzen. Im Großen und Ganzen entfernt man einfach die Caption und den Rand. Die Caption entfernt man, da sie scheinbar zur Clientarea dazugerechnet wird (daher die 12 Pixel...), den Rand entfernt man, da man nicht weiß, wie breit er ist. auf verschiedenen Systemen existieren teilweise verschiedene Window-Styles bei denen die Breite des Rahmens variieren kann. Die Breite kann man zwar auch durch GetWindowRect/GetClientRect mühevoll rausfinden, das lohnt sich aber nur dann, wenn man den Rand denn unbedingt behallten möchte.

Ich hoffe einfach mal, dass du schon ne Winapi Decls hasst, ansonsten kann ich die auch nachliefern.

BtW, für was brauchst du das denn Question

Du hasst nicht zufällig vor nen animierten Desktop zu proggen? Wink

MfG Rufus

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group