home *** CD-ROM | disk | FTP | other *** search
-
- /******************************************************************************\
- * This is a part of the Microsoft Source Code Samples.
- * Copyright (C) 1993-1997 Microsoft Corporation.
- * All rights reserved.
- * This source code is only intended as a supplement to
- * Microsoft Development Tools and/or WinHelp documentation.
- * See these sources for detailed information regarding the
- * Microsoft samples programs.
- \******************************************************************************/
-
- /*---------------------------------------------------------------------------*\
- | GDIDEMO MODULE
- | This is the main entry-point module for the GDIDEMO application. It is
- | intended to provide simple demonstrations of graphical functionality of
- | WIN32. This module is only concerned with the FRAME-WINDOW object.
- \*---------------------------------------------------------------------------*/
-
- #include <windows.h>
- #include "gdidemo.h"
- #include "poly.h"
- #include "xform.h"
- #include "maze.h"
- #include "draw.h"
- #include "bounce.h"
-
- HWND hWndMDIClient = NULL; /* Handle to MDI client */
-
- /*---------------------------------------------------------------------------*\
- | WINDOWS MAIN PROCEDURE
- | This is the process entry-point routine. This is the basis for all
- | application events.
- \*---------------------------------------------------------------------------*/
- int PASCAL WinMain(HANDLE hInst, HANDLE hPrevInst, LPSTR lpszLine, int nShow)
- {
- HWND hWndFrame;
- MSG msg;
-
- lpszLine = lpszLine;
-
- /*
- ** If there's a previous instance of this application, then we do not need
- ** to register it again.
- */
- if(!hPrevInst)
- if(!RegisterAppClass(hInst))
- return(1);
-
-
- /*
- ** Enter the application message-polling loop. This is the anchor for
- ** the application.
- */
- msg.wParam = 1;
- if(hWndFrame = CreateAppWindow(hInst))
- {
- ShowWindow(hWndFrame,nShow);
- UpdateWindow(hWndFrame);
-
- while(GetMessage(&msg,NULL,0,0))
- {
- if(!TranslateMDISysAccel(hWndMDIClient,&msg)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- }
- UnregisterAppClass(hInst);
-
- return(msg.wParam);
- }
-
-
- /*---------------------------------------------------------------------------*\
- | CLIENT WINDOW PROCEDURE
- | This is the main window function for the client-window created. This is
- | the frame window which encompasses the MDI control window.
- \*---------------------------------------------------------------------------*/
- LONG APIENTRY WndProc(HWND hWndFrame, UINT wMsg, WPARAM wParam, LONG lParam)
- {
- HWND hWndClient;
-
-
- switch(wMsg)
- {
- /*
- ** Set up any pre-display stuff. This is where we create the MDI
- ** control window.
- */
- case WM_CREATE:
- CreateProc(hWndFrame);
- /*
- ** DEMO MODE - These PostMessages Are for Demonstration Only
- */
- PostMessage(hWndFrame,WM_COMMAND,IDM_DEMO_DRAW,0);
- PostMessage(hWndFrame,WM_COMMAND,IDM_DEMO_POLYBEZIER,0);
- PostMessage(hWndFrame,WM_COMMAND,IDM_DEMO_BOUNCE,0);
- PostMessage(hWndFrame,WM_COMMAND,IDM_WINDOW_TILE,0);
-
- break;
-
-
- /*
- ** Paint the background of the frame. This really is a NOP since
- ** the MDI control is displayed over the frame's client window.
- */
- case WM_PAINT:
- PaintProc(hWndFrame);
- break;
-
-
- /*
- ** Time to die.
- */
- case WM_DESTROY:
- DestroyProc(hWndFrame);
- break;
-
-
- /*
- ** Process the frame-commands. We need to let the default handler
- ** have this event, since the MDI control handles the
- ** commands as well.
- */
- case WM_COMMAND:
- CommandProc(hWndFrame,wParam,lParam);
-
-
- /*
- ** Since this is the frame-window, we need to grab the MDI client
- ** control window to pass to the MDI control. We store this as
- ** part of the extra-object information for the frame-window.
- */
- default:
- hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND);
- return(DefFrameProc(hWndFrame,hWndClient,wMsg,wParam,lParam));
- }
- return(0l);
- }
-
-
- /*---------------------------------------------------------------------------*\
- | CLIENT CREATE PROCEDURE
- | This is the main event-handler for the WM_CREATE message. It is here
- | we create the MDI control window for the application. We store this
- | information as part of the frame-window extra object information.
- \*---------------------------------------------------------------------------*/
- BOOL CreateProc(HWND hWndFrame)
- {
- /*
- ** Set the window information to contain the child window.
- */
- if(hWndMDIClient = CreateMDIClientWindow(hWndFrame))
- SetWindowLong(hWndFrame,CLIENTWND,(LONG)hWndMDIClient);
-
- return(TRUE);
- }
-
-
- /*---------------------------------------------------------------------------*\
- | COMMAND PROCEDURE
- | This is the main event-handler for the WM_COMMAND event for the window
- | application. All we really do is process the MENU commands for creating
- | the DEMO windows.
- \*---------------------------------------------------------------------------*/
- BOOL CommandProc(HWND hWndFrame, WPARAM wParam, LONG lParam)
- {
- HWND hWndClient;
-
- lParam = lParam;
-
- switch(wParam)
- {
- /*
- ** Demo the poly-bezier window.
- */
- case IDM_DEMO_POLYBEZIER:
- if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
- CreatePolyWindow(hWndClient,0);
- break;
-
-
- /*
- ** Demo the xform's.
- */
- case IDM_DEMO_XFORM:
- if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
- CreateXFormWindow(hWndClient,0);
- break;
-
-
- /*
- ** Demo the maze.
- */
- case IDM_DEMO_MAZE:
- if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
- CreateMazeWindow(hWndClient,0);
- break;
-
-
- /*
- ** Demo random drawing objects.
- */
- case IDM_DEMO_DRAW:
- if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
- CreateDrawWindow(hWndClient,0);
- break;
-
-
- /*
- ** Demo bouncing region balls.
- */
- case IDM_DEMO_BOUNCE:
- if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
- CreateBounceWindow(hWndClient,0);
- break;
-
-
- /*
- ** MDI cascade the demo windows.
- */
- case IDM_WINDOW_CASCADE:
- if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
- SendMessage(hWndClient,WM_MDICASCADE,0,0l);
- break;
-
-
- /*
- ** MDI tile the demo windows.
- */
- case IDM_WINDOW_TILE:
- if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
- SendMessage(hWndClient,WM_MDITILE,0,0l);
- break;
-
-
- /*
- ** MDI arrange the MDI icons.
- */
- case IDM_WINDOW_ICON:
- if(hWndClient = (HWND)GetWindowLong(hWndFrame,CLIENTWND))
- SendMessage(hWndClient,WM_MDIICONARRANGE,0,0l);
- break;
-
-
- /*
- ** Display the about box.
- */
- case IDM_HELP_ABOUT:
- DisplayDialogBox(hWndFrame,MAKEINTRESOURCE(ABOUTBOX),(WNDPROC)AboutDlgProc,0l);
- break;
-
-
- /*
- ** Command not recognized.
- */
- default:
- return(FALSE);
- }
- return(TRUE);
- }
-
-
- /*---------------------------------------------------------------------------*\
- | CLIENT PAINT PROCEDURE
- | This is the main event-handler for the WM_PAINT message.
- \*---------------------------------------------------------------------------*/
- VOID PaintProc(HWND hWndFrame)
- {
- HDC hDC;
- PAINTSTRUCT ps;
-
-
- if(hDC = BeginPaint(hWndFrame,&ps))
- EndPaint(hWndFrame,&ps);
-
- return;
- }
-
-
- /*---------------------------------------------------------------------------*\
- | CLIENT DESTROY PROCEDURE
- | This routine is called to cleanup global resources upon exit of the
- | application.
- \*---------------------------------------------------------------------------*/
- VOID DestroyProc(HWND hWndFrame)
- {
- hWndFrame = hWndFrame;
-
- PostQuitMessage(0);
-
- return;
- }
-
-
-
- DWORD FAR lRandom(VOID)
- {
- static DWORD glSeed = (DWORD)-365387184;
-
- glSeed *= 69069;
- return(++glSeed);
- }
-