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