This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/samples/os2/shapes.c

129 lines
3.4 KiB
C

#include <stdlib.h>
#define INCL_WIN
#define INCL_GPI
#include <os2.h>
int SizeX;
int SizeY;
HWND FrameHandle;
HMQ hMessageQueue;
HAB AnchorBlock;
static int Random( int high )
{
return( ( (double)rand() / 32767 ) * high );
}
static void NewColor( HPS ps )
{
GpiSetColor( ps, Random( 15 ) + 1 );
}
/* Draw a rectangular shape of random size and color at random position */
static void DrawEllipse(HWND hwndWindow)
{
POINTL ptl;
HPS ps;
static int Odd = 0;
int parm1,parm2;
ps = WinGetPS( hwndWindow );
ptl.x = Random( SizeX );
ptl.y = Random( SizeY );
GpiMove( ps, &ptl );
ptl.x = Random( SizeX );
ptl.y = Random( SizeY );
parm1 = Random( 50 );
parm2 = Random( 50 );
if( Random( 10 ) >= 5 ) {
NewColor( ps );
GpiBox( ps, DRO_FILL, &ptl, 0, 0 );
NewColor( ps );
GpiBox( ps, DRO_OUTLINE, &ptl, 0, 0 );
} else {
NewColor( ps );
GpiBox( ps, DRO_FILL, &ptl, parm1, parm2 );
NewColor( ps );
GpiBox( ps, DRO_OUTLINE, &ptl, parm1, parm2 );
}
Odd++;
Odd &= 1;
WinReleasePS( ps );
}
/* Client window procedure */
MRESULT EXPENTRY MainDriver( HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2 )
{
HPS ps;
RECTL rcl;
switch( msg ) {
case WM_CREATE:
/* Start a 150ms timer on window creation */
WinStartTimer( AnchorBlock, hwnd, 1, 150 ) ;
break;
case WM_TIMER:
/* Draw another ellipse on each timer tick */
DrawEllipse( hwnd );
return( 0 );
case WM_SIZE:
/* Remember new dimensions when window is resized */
SizeX = SHORT1FROMMP( mp2 );
SizeY = SHORT2FROMMP( mp2 );
return( 0 );
case WM_PAINT:
/* Handle paint events */
ps = WinBeginPaint( hwnd, NULL, NULL );
WinQueryWindowRect( hwnd, &rcl );
WinFillRect( ps, &rcl, CLR_WHITE );
WinEndPaint( ps );
return( 0 );
}
/* Let the default window procedure handle all other messages */
return( WinDefWindowProc( hwnd, msg, mp1, mp2 ) );
}
int main()
{
ULONG style;
QMSG qmsg;
HWND WinHandle;
/* Initialize windowing and create message queue */
AnchorBlock = WinInitialize( 0 );
if( AnchorBlock == 0 ) return( 0 );
hMessageQueue = WinCreateMsgQueue( AnchorBlock, 0 );
if( hMessageQueue == 0 ) return( 0 );
/* Register window class */
if( !WinRegisterClass( AnchorBlock, "Watcom", (PFNWP)MainDriver,
CS_SIZEREDRAW, 0 ) ) {
return( 0 );
}
/* Create frame and client windows */
style = FCF_TITLEBAR | FCF_SYSMENU | FCF_SIZEBORDER | FCF_MINMAX |
FCF_SHELLPOSITION | FCF_TASKLIST;
FrameHandle = WinCreateStdWindow( HWND_DESKTOP, WS_VISIBLE, &style,
"Watcom",
"Shapes - C sample",
0, NULL, 0, &WinHandle );
/* If window creation failed, exit immediately! */
if( FrameHandle == 0 ) return( 0 );
/* Message loop */
while( WinGetMsg( AnchorBlock, &qmsg, NULL, 0, 0 ) ) {
WinDispatchMsg( AnchorBlock, &qmsg );
}
/* Shut down and clean up */
WinDestroyWindow( FrameHandle );
WinDestroyMsgQueue( hMessageQueue );
WinTerminate( AnchorBlock );
return( 1 );
}