home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************************
- *
- * Toybox demonstation program.
- *
- * This is a simple program that demonstrates how to use multiple bitmaps to
- * simulate smooth motion of multiple objects on the client area.
- *
- * The program begins by loading into memory all of the bitmaps that are used
- * by the program and then for each bitmap a DC is created. By creating the
- * DC initially when the bitmaps are loaded, they can be quickly accessed
- * by the BitBlt operation and then displayed onto the output client area.
- *
- * The user can then select several options from the main menu bar, allowing
- * them to add or delete toys (both singly and rapidly to maximum and minimum
- * values), to single step the toys (allowing you to see what is happening)
- * start and stop of the automatic motion, and to get some basic help on the
- * program (the About Box, however, is not just your normal dialog box).
- *
- * As objects are added to the client area, a random type of toy is selected
- * from the six predefined toys, and a random starting frame of animation is
- * selected. By giving each toy a different starting frame, it increases the
- * apparent number of different objects, since they are not all in lock-step
- * animation. The toy is MARKED as new, so initial display of the toy is
- * handled correctly.
- *
- * When an object is deleted, it is only MARKED for deletion, but not actually
- * deleted until all of the balls are drawn.
- *
- * When a frame/animation request is received, a loop is entered for all of the
- * items currently selected. If the current object is a new toy, nothing is
- * initially done, but if it is a normal toy, the object is erased using
- * BitBlt with the SRCINVERT option (this allows objects to overlap each other
- * without you caring about how to fix up the overlaps). Now, if the toy is
- * supposed to move, we compute where/how its moving, do bounds checks (it must
- * stay within the client area) and then compute the new location.
- *
- * Since each toy has a fixed number of animation frames that can be displayed,
- * we must also compute the new frame to display for the toy. It is important
- * to note that the resource file in this program determines how the frames
- * are ordered, so that motion appears fluid when the toys are displayed.
- * If the toy * is not Marked for delete, we BitBlt (using SRVINVERT again)
- * the toy onto the client screen and repeat until all the toys are processed.
- *
- ******************************************************************************
- *
- * If the user selects the Help option and then About, a special client window
- * is created that displays several lines of text about the program, and then
- * displays the six toys along the border of the box in an animated style.
- *
- * The processing of this window is much simpler than the main client, since
- * much less is done. On entry to the window, a timer is (hopefully) created
- * that is used for animation. If the timer create is not successful, the
- * only difference is the toys will not rotate in the help box.
- *
- * The animation routine is much simpler, since we do not need to move the
- * toys nor worry about overlap of the toys (they are at fixed locations).
- * When the timer request is received, the animation routine simply:
- * 1. Erase the old object using PatBlt with the BLACKNESS attribute.
- * 2. Compute the new frame of the toy (don't forget, else no rotation).
- * 3. Display the toy on the screen using BitBlt with the SRCCOPY option.
- * Since we totally erase the toy every time, and then draw the new
- * toy on, we only want to see the toys picture, and this is a faster
- * way than SRVINVERT (which will work the same).
- *
- * This process repeats until the user closes the about box by re-selecting
- * Help and About from the main client area.
- *
- * Copyright (C) 1995 IBM Corporation
- *
- *****************************************************************************/