The following example uses a timer and the STM_SETIMAGE message to animate an icon in a dialog box. The icon handles and the icon identifier (IDI_ICON) are defined in a global header file.
LRESULT APIENTRY StaticProc(hDlg, message, wParam, lParam)
HWND hDlg; /* window handle of dialog box */
UINT message; /* type of message */
UINT wParam; /* message-specific information */
LONG lParam;
{
UINT idTimer = 1;
static UINT i;
static HICON aIcons[11];
switch (message) {
case WM_INITDIALOG: /* initialize dialog box */
i = 0;
/* Load icons("hinst" is defined globally). */
hiconOne = LoadIcon(hinst, "OneIco");
aIcons[i] = hiconOne;
hiconTwo = LoadIcon(hinst, "TwoIco");
aIcons[++i] = hiconTwo;
.
. /* Continue with the remaining icons. */
.
i = 0;
/*
* Use STM_SETIMAGE to associate an icon with the
* IDI_ICON identifier.
*/
SendDlgItemMessage(hDlg, /* dialog box window handle */
IDI_ICON, /* icon identifier */
STM_SETIMAGE, /* message to send */
(WPARAM) IMAGE_ICON, /* image type */
(LPARAM) aIcons[i++]); /* icon handle */
/* Set a timer for 50-millisecond intervals. */
SetTimer(hDlg, idTimer, 50, (TIMERPROC) NULL);
return TRUE;
case WM_TIMER:
/*
* Use STM_SETIMAGE to associate a new icon with
* the IDI_ICON identifier whenever a WM_TIMER
* message is received.
*/
SendDlgItemMessage(hDlg, /* dialog box window handle */
IDI_ICON, /* icon identifier */
STM_SETIMAGE, /* message to send */
(WPARAM) IMAGE_ICON, /* image type */
(LPARAM) aIcons[i++]); /* new icon handle */
if (i == 10)
i = 0;
break;
case WM_COMMAND:
if (wParam == IDOK
|| wParam == IDCANCEL) {
EndDialog(hDlg, TRUE);
return TRUE;
}
return 0;
case WM_DESTROY: /* clean up */
KillTimer(hDlg, idTimer);
DeleteObject(hiconOne);
DeleteObject(hiconTwo);
.
. /* Continue with the remaining icons. */
.
return 0;
}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}