[B+] Fenster in die richtige Größe bringen.

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Xenon

Betreff: [B+] Fenster in die richtige Größe bringen.

BeitragMi, Aug 25, 2004 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, bestimmt habt ihr euch schon gewünscht, dass ihr das Fenster mit einer bestimmten ClientWidth und ClientHeight erstellen könnt. Das geht auch mit dem Style Parameter 32 bei CreateWindow. Allerdings gelten dann die X und Y Koordinaten ebenfalls für die Clientarea und nicht für die gesammte Windowarea, sprich wenn ihr das Fenster bei y = 0 erstellt ist die Titelleiste nicht sichtbar, da sie "über" dem Desktop ist.
Da schaffen meine Funktionen abhilfe, einfach mit CreateWindow und gewünschter X und Y Koordinate das Fenster erstellen (ohne dem style 32) und dann die Funktion AdjustWindowSize aufrufen. Wenn euer Fenster ein Menü hat und dieses nicht in der Clientheight/width enthalten sein soll müsst ihr beim Menü Parameter True angeben.

Für die, die das Fenster auch gleich zentriert am Desktop haben wollen habe ich die Funktion AdjustWindowSizeMiddle geschrieben, welche das Fenster auch gleich richtig ausrichtet (Hier ist dann die X und Y koordinate beim erstellen des Fensters auch egal).
Man könnte sich diese Funktion zwar selbst schreiben, allerdings gibt ClientHeight(Desktop()) und ClientWidth(Desktop()) nicht die richtigen Werte (die ohne Taskleiste) sondern die normale Auflösung zurück. Ebenso könnt ihr dabei nicht beachten ob euer User des Programms die Titelleiste zB am obereren Rand hat. Meine Funktion beachtet das!

Als 3. Funktion hab ich noch eine, die die Fenstergröße genauso groß macht wie am Desktop der Arbeitsbereich groß ist (wieder ohne Taskleiste).

Viel Spaß, Xenon

Hier die user32.decls Funktionen:
BlitzBasic: [AUSKLAPPEN]
GetWindowLong%(hWnd%,wIndx%):"GetWindowLongA"
MoveWindow%(hwnd%, x%, y%, width%, height%, repaint%):"MoveWindow"
AdjustWindowRect%(Rect*, style%, menu%):"AdjustWindowRect"
SystemParametersInfo%(Action%, Param1%, Param2*, WinIni%):"SystemParametersInfoA"


Hier der Code mit Konstanten:
BlitzBasic: [AUSKLAPPEN]
Const SPI_GETWORKAREA	= 48
Const GWL_STYLE = (-16)

Function AdjustWindowSize(window, width, height, menu = False)
Local rectbank, hwnd

hwnd = QueryObject(window, 1)
rectbank = CreateBank(16)
;left
PokeInt rectbank, 0, 0
;top
PokeInt rectbank, 4, 0
;right
PokeInt rectbank, 8, width
;bottom
PokeInt rectbank, 12, height

AdjustWindowRect(rectbank, GetWindowLong(hwnd, GWL_STYLE), menu)

width = PeekInt(rectbank, 8)-PeekInt(rectbank, 0)
height = PeekInt(rectbank, 12)-PeekInt(rectbank, 4)

MoveWindow hwnd, GadgetX(window), GadgetY(window), width, height, True

FreeBank rectbank
End Function

Function AdjustWindowSizeMiddle(window, width, height, menu = False)
Local rectbank, hwnd, desktopbank
Local dx, dy, dw, dh

hwnd = QueryObject(window, 1)
rectbank = CreateBank(16)
;left
PokeInt rectbank, 0, 0
;top
PokeInt rectbank, 4, 0
;right
PokeInt rectbank, 8, width
;bottom
PokeInt rectbank, 12, height

AdjustWindowRect(rectbank, GetWindowLong(hwnd, GWL_STYLE), menu)

desktopbank = CreateBank(16)
Systemparametersinfo(SPI_GETWORKAREA, 0, desktopbank, 0)

width = PeekInt(rectbank, 8)-PeekInt(rectbank, 0)
height = PeekInt(rectbank, 12)-PeekInt(rectbank, 4)

dx = PeekInt(desktopbank, 0)
dy = PeekInt(desktopbank, 4)
dw = PeekInt(desktopbank, 8)-dx
dh = PeekInt(desktopbank, 12)-dy

MoveWindow hwnd, dx+(dw-width)/2, dy+(dh-height)/2, width, height, True

FreeBank rectbank
FreeBank desktopbank
End Function

Function AdjustWindowSizeFakeMaximized(window)
Local rectbank, hwnd, desktopbank
Local dx, dy, dw, dh

desktopbank = CreateBank(16)
Systemparametersinfo(SPI_GETWORKAREA, 0, desktopbank, 0)

dx = PeekInt(desktopbank, 0)
dy = PeekInt(desktopbank, 4)
dw = PeekInt(desktopbank, 8)-dx
dh = PeekInt(desktopbank, 12)-dy

hwnd = QueryObject(window, 1)

MoveWindow hwnd, dx, dy, dw, dh, True

FreeBank rectbank
FreeBank desktopbank
End Function


Und hier ein BeispielCode:
BlitzBasic: [AUSKLAPPEN]
window = CreateWindow("Titel", 0, 0, 200, 200, 0, 3)

AdjustWindowSizeMiddle(window, 800, 600)

Notify ClientWidth(window)+" x "+ClientHeight(window)

Repeat
Until WaitEvent() = $803
End

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group