{█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█}
{█ █}
{█ Virtual Pascal Examples. Version 1.10 █}
{█ Saving window size and position example █}
{█ The Art Of OS/2, Chapter 10, p. 175-177 █}
{█ ─────────────────────────────────────────────────█}
{█ Copyright (c) 1992-1996 by Kathleen Panov █}
{█ VP/2 Version Copyright (C) 1996 fPrint UK Ltd █}
{█ █}
{▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀}
Program WinSave;
{$PMTYPE PM}
Uses
Os2Def, Os2PmApi;
{$D WinRestoreWindowPos example - Copyright (c) 1992-1995 by Kathleen Panov}
{$IFDEF VPDEMO}
{&Dynamic VP11Demo.Lib}
{$ENDIF}
Const
CLS_CLIENT = 'MyClass';
SAVE_NAME = 'WINSAVE';
SAVE_KEY = 'WINDOWPOS';
Function ClientWndProc ( hwndWnd : HWND ;
ulMsg : ULONG;
mpParm1 : MPARAM;
mpParm2 : MPARAM ) : mResult; cdecl;
begin
ClientWndProc := ord(False);
Case ulMsg of
WM_ERASEBACKGROUND :
ClientWndProc := ord(True);
WM_SAVEAPPLICATION :
WinStoreWindowPos ( SAVE_NAME,
SAVE_KEY,
WinQueryWindow ( hwndWnd, QW_PARENT )) ;
else
ClientWndProc := WinDefWindowProc ( hwndWnd,
ulMsg,
mpParm1,
mpParm2 ) ;
end; { Case }
end;
Var
habAnchor : HAB;
hmqQueue : HMQ;
ulFlags : ULONG;
hwndFrame : HWND;
hwndClient : HWND;
bReturn : BOOL;
bLoop : BOOL;
qmMsg : QMSG;
begin
habAnchor := WinInitialize ( 0 ) ;
hmqQueue := WinCreateMsgQueue ( habAnchor, 0 ) ;
WinRegisterClass ( habAnchor,
CLS_CLIENT,
ClientWndProc,
CS_SIZEREDRAW,
0 ) ;
ulFlags := FCF_TITLEBAR OR FCF_SYSMENU OR FCF_SIZEBORDER OR
FCF_MINMAX OR FCF_TASKLIST ;
hwndFrame := WinCreateStdWindow ( HWND_DESKTOP,
WS_VISIBLE,
ulFlags,
CLS_CLIENT,
'Titlebar',
0,
NULLHANDLE,
0,
@hwndClient ) ;
if ( hwndFrame <> NULLHANDLE ) then
begin
bReturn := WinRestoreWindowPos ( SAVE_NAME,
SAVE_KEY,
hwndFrame ) ;
if bReturn then
WinSetWindowPos ( hwndFrame,
HWND_TOP,
0,
0,
0,
0,
SWP_ACTIVATE OR SWP_SHOW )
else
WinSetWindowPos ( hwndFrame,
NULLHANDLE,
10,
10,
400,
300,
SWP_ACTIVATE OR
SWP_MOVE OR
SWP_SIZE OR
SWP_SHOW ) ;
bLoop := WinGetMsg (habAnchor,
qmMsg,
NULLHANDLE,
0,
0 ) ;
while bLoop do
begin
WinDispatchMsg ( habAnchor, qmMsg ) ;
bLoop := WinGetMsg ( habAnchor,
qmMsg,
NULLHANDLE,
0,
0 ) ;
end; { endwhile }
WinDestroyWindow ( hwndFrame ) ;
end;
WinDestroyMsgQueue ( hmqQueue ) ;
WinTerminate ( habAnchor ) ;
end.