Annotation of mstools/samples/gdidemo/gdidemo.c, revision 1.1.1.1

1.1       root        1: /*---------------------------------------------------------------------------*\
                      2: | GDIDEMO MODULE
                      3: |   This is the main entry-point module for the GDIDEMO application.  It is
                      4: |   intended to provide simple demonstrations of graphical functionality of
                      5: |   WIN32.  This module is only concerned with the FRAME-WINDOW object.
                      6: |
                      7: |
                      8: | segment: _TEXT (DOS16)
                      9: | created: 31-Oct-90
                     10: | history: 31-Oct-90 <chriswil> created.
                     11: |
                     12: \*---------------------------------------------------------------------------*/
                     13: 
                     14: #include <windows.h>
                     15: #include "gdidemo.h"
                     16: #include "poly.h"
                     17: #include "xform.h"
                     18: #include "maze.h"
                     19: #include "draw.h"
                     20: #include "bounce.h"
                     21: 
                     22: /*---------------------------------------------------------------------------*\
                     23: | WINDOWS MAIN PROCEDURE
                     24: |   This is the process entry-point routine.  This is the basis for all
                     25: |   application events.
                     26: |
                     27: | created: 31-Oct-90
                     28: | history: 31-Oct-90 <chriswil> created.
                     29: |
                     30: \*---------------------------------------------------------------------------*/
                     31: int PASCAL WinMain(HANDLE hInst, HANDLE hPrevInst, LPSTR lpszLine, int nShow)
                     32: {
                     33:     HWND hWndFrame;
                     34:     MSG  msg;
                     35: 
                     36:     lpszLine = lpszLine;
                     37: 
                     38:     /*
                     39:     ** If there's a previous instance of this application, then we do not need
                     40:     ** to register it again.
                     41:     */
                     42:     if(!hPrevInst)
                     43:         if(!RegisterAppClass(hInst))
                     44:             return(1);
                     45: 
                     46: 
                     47:     /*
                     48:     ** Enter the application message-polling loop.  This is the anchor for
                     49:     ** the application.
                     50:     */
                     51:     msg.wParam = 1;
                     52:     if(hWndFrame = CreateAppWindow(hInst))
                     53:     {
                     54:        ShowWindow(hWndFrame,nShow);
                     55:         UpdateWindow(hWndFrame);
                     56: 
                     57:         while(GetMessage(&msg,NULL,0,0))
                     58:         {
                     59:             TranslateMessage(&msg);
                     60:             DispatchMessage(&msg);
                     61:         }
                     62:     }
                     63:     UnregisterAppClass(hInst);
                     64: 
                     65:     return(msg.wParam);
                     66: }
                     67: 
                     68: 
                     69: /*---------------------------------------------------------------------------*\
                     70: | CLIENT WINDOW PROCEDURE
                     71: |   This is the main window function for the client-window created.  This is
                     72: |   the frame window which encompasses the MDI control window.
                     73: |
                     74: | created: 31-Oct-90
                     75: | history: 31-Oct-90 <chriswil> created.
                     76: |
                     77: \*---------------------------------------------------------------------------*/
                     78: LONG APIENTRY WndProc(HWND hWndFrame, UINT wMsg, WPARAM wParam, LONG lParam)
                     79: {
                     80:     HWND hWndClient;
                     81: 
                     82: 
                     83:     switch(wMsg)
                     84:     {
                     85:         /*
                     86:         ** Set up any pre-display stuff.  This is where we create the MDI
                     87:         ** control window.
                     88:         */
                     89:         case WM_CREATE:
                     90:             CreateProc(hWndFrame);
                     91:             break;
                     92: 
                     93: 
                     94:         /*
                     95:         ** Paint the background of the frame.  This really is a NOP since
                     96:         ** the MDI control is displayed over the frame's client window.
                     97:         */
                     98:         case WM_PAINT:
                     99:             PaintProc(hWndFrame);
                    100:             break;
                    101: 
                    102: 
                    103:         /*
                    104:         ** Time to die.
                    105:         */
                    106:         case WM_DESTROY:
                    107:             DestroyProc(hWndFrame);
                    108:             break;
                    109: 
                    110: 
                    111:         /*
                    112:         ** Process the frame-commands.  We need to let the default handler
                    113:         ** have this event, since the MDI control handles the
                    114:         ** commands as well.
                    115:         */
                    116:         case WM_COMMAND:
                    117:             CommandProc(hWndFrame,wParam,lParam);
                    118: 
                    119: 
                    120:         /*
                    121:         ** Since this is the frame-window, we need to grab the MDI client
                    122:         ** control window to pass to the MDI control.  We store this as
                    123:         ** part of the extra-object information for the frame-window.
                    124:         */
                    125:         default:
                    126:             hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND);
                    127:             return(DefFrameProc(hWndFrame,hWndClient,wMsg,wParam,lParam));
                    128:     }
                    129:     return(0l);
                    130: }
                    131: 
                    132: 
                    133: /*---------------------------------------------------------------------------*\
                    134: | CLIENT CREATE PROCEDURE
                    135: |   This is the main event-handler for the WM_CREATE message.  It is here
                    136: |   we create the MDI control window for the application.  We store this
                    137: |   information as part of the frame-window extra object information.
                    138: |
                    139: | created: 31-Oct-90
                    140: | history: 31-Oct-90 <chriswil> created.
                    141: |
                    142: \*---------------------------------------------------------------------------*/
                    143: BOOL CreateProc(HWND hWndFrame)
                    144: {
                    145:     HMENU hMenu;
                    146:     HWND  hWnd;
                    147: 
                    148: 
                    149:     /*
                    150:     ** Set the window information to contain the child window.
                    151:     */
                    152:     if(hWnd = CreateMDIClientWindow(hWndFrame))
                    153:         SetWindowLong(hWndFrame,CLIENTWND,(LONG)hWnd);
                    154: 
                    155:     if(hMenu = GetSubMenu(GetMenu(hWndFrame),0))
                    156:     {
                    157:         ModifyMenu(hMenu,IDM_DEMO_XFORM ,MF_BYCOMMAND | MF_GRAYED,IDM_DEMO_XFORM ,"&XForm");
                    158:        ModifyMenu(hMenu,IDM_DEMO_MAZE  ,MF_BYCOMMAND | MF_GRAYED,IDM_DEMO_MAZE  ,"&Maze");
                    159:         DrawMenuBar(hWndFrame);
                    160:     }
                    161: 
                    162:     return(TRUE);
                    163: }
                    164: 
                    165: 
                    166: /*---------------------------------------------------------------------------*\
                    167: | COMMAND PROCEDURE
                    168: |   This is the main event-handler for the WM_COMMAND event for the window
                    169: |   application.  All we really do is process the MENU commands for creating
                    170: |   the DEMO windows.
                    171: |
                    172: | created: 31-Oct-90
                    173: | history: 31-Oct-90 <chriswil> created.
                    174: |
                    175: \*---------------------------------------------------------------------------*/
                    176: BOOL CommandProc(HWND hWndFrame, WPARAM wParam, LONG lParam)
                    177: {
                    178:     HWND hWndClient;
                    179: 
                    180:     lParam = lParam;
                    181: 
                    182:     switch(wParam)
                    183:     {
                    184:         /*
                    185:         ** Demo the poly-bezier window.
                    186:         */
                    187:         case IDM_DEMO_POLYBEZIER:
                    188:             if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
                    189:                 CreatePolyWindow(hWndClient,0);
                    190:             break;
                    191: 
                    192: 
                    193:         /*
                    194:         ** Demo the xform's.
                    195:         */
                    196:         case IDM_DEMO_XFORM:
                    197:             if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
                    198:                 CreateXFormWindow(hWndClient,0);
                    199:             break;
                    200: 
                    201: 
                    202:         /*
                    203:         ** Demo the maze.
                    204:         */
                    205:         case IDM_DEMO_MAZE:
                    206:             if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
                    207:                 CreateMazeWindow(hWndClient,0);
                    208:             break;
                    209: 
                    210: 
                    211:         /*
                    212:         ** Demo random drawing objects.
                    213:         */
                    214:         case IDM_DEMO_DRAW:
                    215:             if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
                    216:                 CreateDrawWindow(hWndClient,0);
                    217:             break;
                    218: 
                    219: 
                    220:         /*
                    221:         ** Demo bouncing region balls.
                    222:         */
                    223:         case IDM_DEMO_BOUNCE:
                    224:             if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
                    225:                 CreateBounceWindow(hWndClient,0);
                    226:             break;
                    227: 
                    228: 
                    229:         /*
                    230:         ** MDI cascade the demo windows.
                    231:         */
                    232:         case IDM_WINDOW_CASCADE:
                    233:             if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
                    234:                 SendMessage(hWndClient,WM_MDICASCADE,0,0l);
                    235:             break;
                    236: 
                    237: 
                    238:         /*
                    239:         ** MDI tile the demo windows.
                    240:         */
                    241:         case IDM_WINDOW_TILE:
                    242:             if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
                    243:                 SendMessage(hWndClient,WM_MDITILE,0,0l);
                    244:             break;
                    245: 
                    246: 
                    247:         /*
                    248:         ** MDI arrange the MDI icons.
                    249:         */
                    250:         case IDM_WINDOW_ICON:
                    251:             if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
                    252:                 SendMessage(hWndClient,WM_MDIICONARRANGE,0,0l);
                    253:             break;
                    254: 
                    255: 
                    256:         /*
                    257:         ** Display the about box.
                    258:         */
                    259:         case IDM_HELP_ABOUT:
                    260:             DisplayDialogBox(hWndFrame,MAKEINTRESOURCE(ABOUTBOX),(WNDPROC)AboutDlgProc,0l);
                    261:             break;
                    262: 
                    263: 
                    264:         /*
                    265:         ** Command not recognized.
                    266:         */
                    267:         default:
                    268:             return(FALSE);
                    269:     }
                    270:     return(TRUE);
                    271: }
                    272: 
                    273: 
                    274: /*---------------------------------------------------------------------------*\
                    275: | CLIENT PAINT PROCEDURE
                    276: |   This is the main event-handler for the WM_PAINT message.
                    277: |
                    278: | created: 31-Oct-90
                    279: | history: 31-Oct-90 <chriswil> created.
                    280: |
                    281: \*---------------------------------------------------------------------------*/
                    282: VOID PaintProc(HWND hWndFrame)
                    283: {
                    284:     HDC         hDC;
                    285:     PAINTSTRUCT ps;
                    286: 
                    287: 
                    288:     if(hDC = BeginPaint(hWndFrame,&ps))
                    289:         EndPaint(hWndFrame,&ps);
                    290: 
                    291:     return;
                    292: }
                    293: 
                    294: 
                    295: /*---------------------------------------------------------------------------*\
                    296: | CLIENT DESTROY PROCEDURE
                    297: |   This routine is called to cleanup global resources upon exit of the
                    298: |   application.
                    299: |
                    300: | created: 31-Oct-90
                    301: | history: 31-Oct-90 <chriswil> created.
                    302: |
                    303: \*---------------------------------------------------------------------------*/
                    304: VOID DestroyProc(HWND hWndFrame)
                    305: {
                    306:     hWndFrame = hWndFrame;
                    307: 
                    308:     PostQuitMessage(0);
                    309: 
                    310:     return;
                    311: }
                    312: 
                    313: 
                    314: 
                    315: DWORD FAR lRandom(VOID)
                    316: {
                    317:     static DWORD glSeed = (DWORD)-365387184;
                    318: 
                    319:     glSeed *= 69069;
                    320:     return(++glSeed);
                    321: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.