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 CALLBACK StaticProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UINT idTimer = 1;
static UINT i;
static HICON aIcons[11];
switch (message)
{
case WM_INITDIALOG:
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);
}