[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] how do I maximize the window?



hmm, I'm having a problem with this.  when i maximize, the title bar
goes into the right place, etc., but the actual viewing space is a
little too far up.  it stops, with no border, a few pixels above the
taskbar, and starts a few pixels above the title bar but behind it so
stuff is covered up by the title bar.  is there any solution to this?

On 10/14/07, John Popplewell <john@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> On Sun, Oct 14, 2007 at 04:55:14AM +0000, Richard wrote:
> > How do I maximize the pygame window or start it maximized? not fullscreen, just
> > maximized.  by code, not by clicking on the maximize button.  i can't find a way
> > to do this. if there's really not a way to do it, that's kind of disappointing.
> Hi,
>
> you can't using a built-in Pygame function. There is iconify() but no
> corresponding restore() or maximize(). It is a limitation of the
> underlying SDL library, which is being fixed in SDL-1.3 (or SDL-2).
>
> For now, I use the ctypes module to call the platform-specific
> functions:
>
> import sys
> import pygame
>
> if sys.platform == "win32":
>     from ctypes import windll, Structure, c_long, c_ulong, sizeof, byref
>
>     SW_HIDE             =   0
>     SW_SHOWNORMAL       =   1
>     SW_NORMAL           =   1
>     SW_SHOWMINIMIZED    =   2
>     SW_SHOWMAXIMIZED    =   3
>     SW_MAXIMIZE         =   3
>     SW_SHOWNOACTIVATE   =   4
>     SW_SHOW             =   5
>     SW_MINIMIZE         =   6
>     SW_SHOWMINNOACTIVE  =   7
>     SW_SHOWNA           =   8
>     SW_RESTORE          =   9
>     SW_SHOWDEFAULT      =   10
>     SW_FORCEMINIMIZE    =   11
>     SW_MAX              =   11
>
>     SWP_NOSIZE          =   0x0001
>     SWP_NOMOVE          =   0x0002
>     SWP_NOZORDER        =   0x0004
>     SWP_NOREDRAW        =   0x0008
>     SWP_NOACTIVATE      =   0x0010
>     SWP_FRAMECHANGED    =   0x0020
>     SWP_SHOWWINDOW      =   0x0040
>     SWP_HIDEWINDOW      =   0x0080
>     SWP_NOCOPYBITS      =   0x0100
>     SWP_NOOWNERZORDER   =   0x0200
>     SWP_NOSENDCHANGING  =   0x0400
>     SWP_DRAWFRAME       =   SWP_FRAMECHANGED
>     SWP_NOREPOSITION    =   SWP_NOOWNERZORDER
>
>     HWND_TOP            =   0
>     HWND_BOTTOM         =   1
>     HWND_TOPMOST        =  -1
>     HWND_NOTOPMOST      =  -2
>
>     user32              = windll.user32
>     IsIconic            = user32.IsIconic
>     IsZoomed            = user32.IsZoomed
>     ShowWindow          = user32.ShowWindow
>     GetWindowRect       = user32.GetWindowRect
>     SetWindowPos        = user32.SetWindowPos
>     GetForegroundWindow = user32.GetForegroundWindow
>     SetForegroundWindow = user32.SetForegroundWindow
>
>     class RECT(Structure):
>         _fields_ = [
>             ('left',    c_long),
>             ('top',     c_long),
>             ('right',   c_long),
>             ('bottom',  c_long),
>         ]
>         def width(self):  return self.right  - self.left
>         def height(self): return self.bottom - self.top
>
>
>     def getSDLWindow():
>         return pygame.display.get_wm_info()['window']
>
>     def SDL_IsIconic():
>         return IsIconic(getSDLWindow())
>
>     def SDL_IsMaximized():
>         return IsZoomed(getSDLWindow())
>
>     def SDL_Minimize():
>         return ShowWindow(getSDLWindow(), SW_MINIMIZE)
>
>     def SDL_Maximize():
>         return ShowWindow(getSDLWindow(), SW_MAXIMIZE)
>
>     def SDL_Restore():
>         return ShowWindow(getSDLWindow(), SW_RESTORE)
>
>     def SDL_Show(state):
>         state = (SW_HIDE, SW_SHOW)[bool(state)]
>         return ShowWindow(getSDLWindow(), state)
>
>     def SDL_Activate():
>         hWnd = getSDLWindow()
>         if GetForegroundWindow() != hWnd:
>            SetForegroundWindow(hWnd)
>
>     def SDL_GetWindowPos():
>         rc = RECT()
>         GetWindowRect(getSDLWindow(), byref(rc))
>         return rc.left, rc.top
>
>     def SDL_SetWindowPos(x, y):
>         return SetWindowPos(getSDLWindow(), 0, x, y, 0, 0, SWP_NOZORDER|SWP_NOSIZE)
>
>     def SDL_AlwaysOnTop(state):
>         zorder = (HWND_NOTOPMOST, HWND_TOPMOST)[state]
>         return SetWindowPos(getSDLWindow(), zorder, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE)
>
> else:
>     def SDL_IsIconic():
>         return 0
>
>     def SDL_IsMaximized():
>         return 0
>
>     def SDL_Minimize():
>         return 0
>
>     def SDL_Maximize():
>         return 0
>
>     def SDL_Restore():
>         return 0
>
>     def SDL_Show(state):
>         return 0
>
>     def SDL_Activate():
>         pass
>
>     def SDL_GetWindowPos():
>         return (-1, -1)
>
>     def SDL_SetWindowPos(x, y):
>         return 0
>
>     def SDL_AlwaysOnTop(state):
>         return 0
>
>
> I don't have any code for X, but I don't believe it's much more
> complicated.
>
> Equivalent functions could be added to Pygame with support for other
> Windowing systems,
>
> regards,
> John.
>
>