Files
harbour-core/extras/gtwvw/tests/maximize.prg
vszakats 9687850865 2013-03-16 02:10 UTC+0100 Viktor Szakats (harbour syenar.net)
* (all files)
    * stripped svn header
    * minor cleanups
    ; use following command to find out the history of files:
       git log
       git log --follow
       git blame
       git annotate
2013-03-16 02:11:42 +01:00

140 lines
3.8 KiB
Plaintext

/*
sample on using Maximize Mode in gtwvw.
budyanto@centrin.net.id
*/
#require "gtwvw"
#include "inkey.ch"
// this dimension will be used when user presses RESTORE button
STATIC s_nNormalMaxrow := 24
STATIC s_nNormalMaxcol := 79
STATIC s_lSizeReady := .F.
PROCEDURE Main()
#if defined( __HBSCRIPT__HBSHELL ) .AND. defined( __PLATFORM__WINDOWS )
hbshell_gtSelect( "GTWVW" )
#endif
// activate WVW_SIZE()
s_lSizeReady := .T.
// the biggest possible window
SetColor( "N/W" )
SetMode( wvw_MaxMaxRow() + 1, wvw_MaxMaxCol() + 1 )
// enable MAXIMIZE button
wvw_EnableMaximize( 0, .T. )
// set the window to MAXIMIZED state
wvw_Maximize( 0 )
updatescr()
DO WHILE Inkey( 0 ) != K_ESC
// refresh screen, probably in a new dimension
// (You may alternatively call updatescr() from WVW_SIZE instead)
updatescr()
ENDDO
RETURN
PROCEDURE diminfo()
@ 0, 0 SAY "Window size: " + hb_ntos( MaxRow() + 1 ) + " x " + hb_ntos( MaxCol() + 1 ) + " "
RETURN
PROCEDURE updatescr()
LOCAL i
CLS
FOR i := 0 TO MaxCol()
@ 0, i SAY "T"
NEXT
FOR i := 0 TO MaxRow()
@ i, 0 SAY "L"
NEXT
FOR i := 0 TO MaxCol()
@ MaxRow(), i SAY "B"
#if 0
@ MaxRow() - 1, i SAY Right( Transform( i, "999" ), 1 )
#endif
NEXT
FOR i := 0 TO MaxRow()
@ i, MaxCol() SAY "R"
NEXT
@ Int( MaxRow() / 2 ) + 0, 2 SAY PadC( "Press MAXIMIZE/RESTORE button to change dimension", MaxCol() + 1 - 4 )
@ Int( MaxRow() / 2 ) + 1, 2 SAY PadC( "Try also changing taskbar size/position", MaxCol() + 1 - 4 )
@ Int( MaxRow() / 2 ) + 3, 2 SAY PadC( "Press any key to redraw screen", MaxCol() + 1 - 4 )
@ Int( MaxRow() / 2 ) + 4, 2 SAY PadC( "Press ESC to quit", MaxCol() + 1 - 4 )
diminfo()
RETURN
// this function is called by gtwvw AFTER the size is changed
// WARNING: screen repainting is not performed completely by gtwvw at this point of call
FUNCTION WVW_SIZE( nWinNum, hWnd, message, wParam, lParam )
LOCAL cScreen
LOCAL lNeedReset
LOCAL maxsavedscrrow, maxsavedscrcol
HB_SYMBOL_UNUSED( message )
HB_SYMBOL_UNUSED( hWnd )
HB_SYMBOL_UNUSED( lParam )
IF ! s_lSizeReady
// program is not ready to handle window resizing
// (or this function is currently running)
RETURN NIL
ENDIF
IF nWinNum != 0
// only care about Main Window
RETURN NIL
ENDIF
// avoid reentrance
s_lSizeReady := .F.
DO CASE
CASE wParam == 2 // SIZE_MAXIMIZED
// Alert( "MAXIMIZE" )
// reset is required only if we are changing size
lNeedReset := MaxCol() != wvw_MaxMaxCol();
.OR. MaxRow() != wvw_MaxMaxRow()
IF lNeedReset
maxsavedscrrow := Min( Min( s_nNormalMaxrow, wvw_MaxMaxRow() ), MaxRow() )
maxsavedscrcol := Min( Min( s_nNormalMaxcol, wvw_MaxMaxCol() ), MaxCol() )
cScreen := SaveScreen( 0, 0, maxsavedscrrow, maxsavedscrcol )
IF SetMode( wvw_MaxMaxRow() + 1, wvw_MaxMaxCol() + 1 ) // adjust MaxRow() & MaxCol()
RestScreen( 0, 0, maxsavedscrrow, maxsavedscrcol, cScreen )
ENDIF
diminfo() // updatescr()
ENDIF
CASE wParam == 0 // SIZE_RESTORED
// Alert( "RESTORE" )
lNeedReset := MaxCol() != s_nNormalMaxcol .OR. ;
MaxRow() != s_nNormalMaxrow
IF lNeedReset
maxsavedscrrow := Min( s_nNormalMaxrow, MaxRow() )
maxsavedscrcol := Min( s_nNormalMaxcol, MaxCol() )
cScreen := SaveScreen( 0, 0, maxsavedscrrow, maxsavedscrcol )
IF SetMode( s_nNormalMaxrow + 1, s_nNormalMaxcol + 1 )
RestScreen( 0, 0, maxsavedscrrow, maxsavedscrcol, cScreen )
ENDIF
diminfo() // updatescr()
ENDIF
OTHERWISE
// do nothing
ENDCASE
// allow next call
s_lSizeReady := .T.
RETURN NIL