|
|
|
Blinds (Horz)
|
Melt (Left)
|
Wipe (Vert)
|
|
|
|
Scatter4
|
SlideVanish
|
Scatter6
|
The Pitch
Ever get bored minimizing, maximizing & restoring windows? Ever wanted
to catch the user unawares and make them notice an app that's just that
little bit special. Ever wanted to make a stealth program that literally
slides into the background. Well with the CWindowAnima
class you can now
animate the appearance and disappearance of windows in ways a little different
from the norm. There are twelve effects in total, six &"vanishing&"
effects and six opposite &"appearing&" effects. They include
Blind, Melt, Wipe, Scatter4, Scatter6, SlideVanish, UnBlind, UnMelt, UnWipe,
ReAssemble4, ReAssemble6 and SlideAppear.
What's more these effects can be done on buttons, dialogs and anything
else that's a CWnd
derivative. The sample project (seen above) demonstrates
all twelve effects on a simple dialog box. The project also includes an
exploding button (using the Scatter6 effect) but I didn't include
the screen shot, so I guess you'll have to download the project to see
it! ;)
CWindowAnima
works by capturing images of both the screen and the window
and animating the image of the window. There are a comprehensive list
of functions contained within the class and several flags and options
that need explaining so nothing like a few examples to get us going.
The following code is pulled straight from the example project but I'll
reproduce it here none the less. Further down this page you'll find a
few notes, the parameters to the various effects (because where's the
fun if you can't tweak it a little to suit your needs) and a summary of
the public functions. If you manage to get past all of that you're rewarded
with a link to the project files and source code.
Example #1 - Melting & UnMelting
CWindowAnima wa(this, WA_KEEP_TASKBAR_ONTOP);
wa.Melt(WA_LEFT,6,80);
wa.MoveWindowPosition(600,400);
wa.UnMelt();
Example #2 - SlideVanish & SlideAppear
CWindowAnima WA(this,WA_KEEP_TASKBAR_ONTOP);
wa.SlideVanish();
Sleep(3000);
wa.FlagSet(WA_WND_SKIPCAPTURE|WA_WND_SKIPRESTORE);
wa.ReplaceWindowImage(IDB_HOUSE);
wa.SlideAppear();
Sleep(2000);
wa.RestoreWindow();
Example #3 - Blind & UnBlind
CWindowAnima WA;
wa.SetWindow(this);
wa.Blind(WA_HORZ);
Sleep(1000);
Author's Notes
Just a few things to say about this class. First of all while it should
(gotta cover myself for any eventualities)
work on any CWnd
derivative, it's probably best only to animate relatively
small dialogs and buttons or at least give the user the opportunity of
animating the window or not. Basically large windows will crawl sluggishly
around your screen and the user will get bored and then annoyed.
Secondly if you find that the window sometimes gets smeared across the
screen. I.e. the old image during an animation isn't overwritten look
at the HideWindow()
function as it may help.
Thirdly if anyone could provide some code to do some fast image rotation
or even better a new effect or two, I'd appreciate it.
So that's pretty much it - enjoy!
Effects Function Parameters
Animation
Effect
|
Function
Parameters
|
Blind & UnBlind |
Parameter Name
|
Default Value
| nDirection |
WA_VERT
| nSegments |
8
| nGapFactor |
4
| nSleeptime |
100
|
|
Melt & UnMelt |
Parameter Name
|
Default Value
| nDirection |
WA_AUTO
| nSegments |
6
| nStagger |
40
| nSleeptime |
1
|
|
Wipe & UnWipe |
Parameter Name
|
Default Value
| nDirection |
WA_RAND
| nWipeFactor |
4
| nSleeptime |
20
|
|
Scatter4 & ReAssemble4
Scatter6 & ReAssemble6
|
Parameter Name
|
Default Value
| nDistance |
90
| nMoveFactor |
4
| nSleeptime |
1
|
|
SlideVanish & SlideAppear |
Parameter Name
|
Default Value
| nSlideFactor |
1
| nScaleFactor |
15
| nSlideDelay |
10
| nVanishDelay |
0
|
|
Summary of Public Functions
CWindowAnima() | There
are two constructors for CWindowAnima objects. The default constructor takes
no arguments and any object created this way needs to call SetWindow () before
any animations are done. The second constructor takes a pointer to a CWnd
object or derivative as its first parameter and any flags as its second
parameter. Internally the constructor calls FlagSet () and SetWindow () in
that order. |
FlagSet() | Sets the
flags member variable with the nFlags parameter. Returns the current state
of the flags. |
FlagUnset() | Unsets
the flags member variable with the nFlags parameter. Returns the current
state of the flags |
FlagIsSet() |
Returns either TRUE
or FALSE depending on whether a flag or set of flags is set or not.
|
CopyWindowCapture() | Grabs
a copy of the window that another CWindowAnima object has gone to all the
trouble of capturing. Also makes sure (in debug mode) that some idiot hasn't
passed us a pointer to an CWindowAnima object that hasn't got a window image. |
CopyScreenCapture() | Grabs
a copy of the screen that another CWindowAnima object has gone to all the
trouble of capturing. Also makes sure (in debug mode) that some idiot hasn't
passed us a pointer to an CWindowAnima object that hasn't got a screen image. |
ReplaceWindowImage() |
Replaces
a window's image and size using an image resource ID. Useful if you wanted
to animate the initial appearance of a window whose image has not been
captured before. This function is overloaded and the user may also choose
to replace a window's image and size with an image contained in a CDC
object.
|
SetClippingRegion() | Sets
the clipping region rectangle for the animation and updates the screen dimensions.
Takes a CRect object as an input parameter or four integers
describing a bounding box. |
GetClippingRegion() | Returns
the current Clipping Region and the classes' idea of how big the screen
is. Clipping region and screen size are set to the same values internally. |
SetWindow() | Sets
the window to be animated and captures an image of the window. Asserts (in
debug mode) if the window given as a parameter is NULL. |
GetWindow() | Returns
a pointer to the window that was stored when the object was initialised
in the constructor or when the SetWindow function was called. |
GetWindowRect() | Copies
the window's bounding rectangle into the empty CRect structure passed to
it as a parameter. |
MoveWindowPosition() | Repositions
the window being animated to the new coordinates specified by x and y integers
and updates any internal variables that keep track of window position. |
ShowWindow() | Simply
calls the CWnd function ShowWindow(SW_SHOW) on the internal window
pointer. |
RestoreWindow() | Restores
the window and the proper background of the window to their proper location.
Internally RestoreWindow() is called with its parameter set to FALSE so
it will check for the WA_KEEP_WINDOW_HIDDEN, WA_KEEP_BKGRND_HIDDEN or WA_WND_SKIPRESTORE
flags (see the flags section for more information on what these flags
do). Calling RestoreWindow() externally with no parameters causes the
function to use the default value TRUE as its parameter and therefore ignore
the value of any of the flags. It is assumed that the only reason a user
would call this function explicitly is to restore a window irrespective
of what the flags are set to. |
Animation
Functions | |
Blind() | Creates
a blinds disappearing effect on the window. There are two types of effect,
vertical blinds or horizontal blinds. Use the WA_VERT or WA_HORZ direction
values to choose the desired effect. |
UnBlind() |
Creates a blinds
appearing effect on the window. This is similar to the &"Blinding&"
effect described above and the possible direction values are identical.
|
Wipe() | Wipes
the window into oblivion. The type of wipe animation depends on the direction
value passed to it. Valid directions are WA_LEFT, WA_RIGHT, WA_UP, WA_DOWN,
WA_HORZ, WA_VERT, WA_RAND(default), WA_AUTO. |
UnWipe() | UnWipes
the window into existence. The type of Unwipe animation depends of the direction
value given. Valid directions are the same as those in the &"Wiping&"
animation above. |
Melt() | Melts
the window off the screen. The direction the window will melt towards is
dependent on the direction value given. Valid directions for this animation
are WA_LEFT, WA_RIGHT, WA_UP, WA_DOWN, WA_RAND, WA_AUTO (default). |
UnMelt() | UnMelts
the window onto the screen. The screen edge that the window will unmelt
from is dependent on the direction value given. Valid directions are the
same as those for the &"Melting&" animation above. |
Scatter4() | Splits
the window into four separate rectangles and sends each part flying away
from the window's center point |
ReAssemble4() | Four
separate parts of a window fly from different directions to a central point
where they join to make a full window. |
Scatter6() | Splits
the window into six separate rectangles and sends each part flying away
from the window's center point |
ReAssemble6() | Six separate
parts of a window fly from different directions to a central point where
they join to make a full window. |
SlideVanish() | Two partitions
slide horizontally away from eachother underneath the window. The window
then disappears into the black void, Finally the partitions close back together
leaving the screen intact minus the window. |
SlideAppear() | Two partitions
slide horizontally away from eachother opening into a black void. Zooming
out of the void the window appears. The partitions then close slide back
together again behind the now fully visible window. |
Flags | |
WA_SCR_SKIPCAPTURE | Each time
a CWindowAnima object performs an animation it captures the area of the
screen inside the clipping region. By setting this flag the animation will
not capture the screen when it executes. You might use this if you've copied
the screen image from another CWindowAnima object or else the window will
disappear and appear in a very short space of time and the screen appearance
is unlikely to change in the meantime. |
WA_WND_SKIPCAPTURE | When a
CWindowAnima object is initialised it tries to capture an image of the window
being animated. By setting this flag CWindowAnima will not capture the screen
image. Important to set this flag if the window you're going to animate
is invisible when you initialise the CWindowAnima object or when you're
copying the image of the window between to objects. |
WA_WND_SKIPRESTORE | By setting
this flag the real window will not be restored to view after &"appearing&"
effects such as UnBlind, UnMelt, SlideAppear, UnWipe, ReAssemble4 or ReAssemble6.
This flag overrides both the WA_KEEP_WINDOW_HIDDEN & WA_KEEP_BKGRND_HIDDEN
flags. |
WA_KEEP_WINDOW_HIDDEN |
Normally when an
&"appearing&" effect has finished executing the correct window
background is printed onto the screen and the real window is then set
to visible. By setting this flag the correct window background is painted
to the screen but the window is not made visible. A call to either RestoreWindow
or ShowWindow is needed.
|
WA_KEEP_BKGRND_HIDDEN | Normally
when an &"appearing&" effect has finished executing the correct
window background is printed onto the screen and the real window is then
set to visible. By setting this flag the window is made visible but the
window background is never painted to the screen. This usually results in
having an image of the window stuck behind the real window instead of the
correct background. A call to RestoreWindow is needed to correct the problem. |
WA_KEEP_TASKBAR_ONTOP |
Setting this flag
adjusts the clipping region to exclude the Windows Taskbar. When this
flag is set animations will seem to appear from and disappear under the
taskbar instead of the default which is to animate over the Windows Taskbar.
|
WA_SKIPHIDEONCAPTURE | When an
animation captures the screen, it calls the window's CWnd ShowWindow()
function with the SW_HIDE parameter. Setting this flag ensures that the
window is not hidden when a screen capture is performed. |
Directions | |
WA_LEFT | |
WA_RIGHT | |
WA_UP | |
WA_DOWN | |
WA_VERT | |
WA_HORZ | |
WA_RAND | In the
Melt, UnMelt, Wipe & UnWipe effects causes the animation to execute
in a random direction. |
WA_AUTO | In the
Melt & UnMelt effects causes the window to melt towards or unmelt from
the side of the screen closest to the window's top-left corner. |
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.