Using Static Controls

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);

}