LBitmapList::Create

#include "ltwrappr.h"

virtual L_INT LBitmapList::Create()

Creates a new bitmap list for the class object.

Returns

SUCCESS

The function was successful.

< 1

An error occurred. Refer to Return Codes.

Comments

The class object must contain a valid bitmap list before you can use functions to insert, remove, or otherwise access bitmap list items.

You can create a bitmap list for the class object by doing one of the following:

image\sqrblit.gif calling LBitmapList::Create

image\sqrblit.gif calling the constructor LBitmapList(LBitmapList * pBitmapList)

image\sqrblit.gif using the = operator

image\sqrblit.gif using LBitmapList::Load

image\sqrblit.gif calling LBitmapList::CopyItems

image\sqrblit.gif calling LBitmapList::SetBitmapList

image\sqrblit.gif calling LBitmapList::SetHandle.

Required DLLs and Libraries

LTFIL

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application.

See Also

Functions:

Class Members

Topics:

Raster Image Functions: Playing Animated Images

 

Implementing Animation

Example

L_INT LBitmapList__CreateExample(HWND hWnd, L_TCHAR * szFilename,LBitmapBase LeadBitmap)
{
   UNREFERENCED_PARAMETER(szFilename);
   L_INT nRet;
   LBitmapList  BmpList; /* Bitmap list */
   LPlayBack    PlayBack;
   LBitmapBase  TmpBitmap; /* Temporary bitmap for building the list */
   LAnimationWindow Animation;
   L_INT nMax = 160; /* Maximum width or height for bitmaps in the list */
   HDC hdc; /* Device context of the current window */   
   RGBQUAD TmpPalette[1];  /* Palette to define the transparent color */
   L_INT i;                /* Loop counter */
   L_UINT uState;
   RECT rcUpdate,rcDisplay;
   HPALETTE hPalette, hpalPaint;
   /* Reduce memory requirements, if necessary. Only small bitmaps play smoothly. */
   if (LeadBitmap.GetWidth()>nMax)  
   {
      nRet =LeadBitmap.Resize(&LeadBitmap, sizeof(BITMAPHANDLE), SIZE_RESAMPLE);
      if(nRet !=SUCCESS)
         return nRet;
   }
   else 
      if (LeadBitmap.GetHeight()>nMax)
      {
         nRet =LeadBitmap.Resize(&LeadBitmap, sizeof(BITMAPHANDLE), SIZE_RESAMPLE);
         if(nRet !=SUCCESS)
            return nRet;
      }
   /* Dither to an optimized palette, leaving the last color blank to use   later for transparency */
   nRet =LeadBitmap.ColorRes(8,CRF_FLOYDSTEINDITHERING|CRF_OPTIMIZEDPALETTE|CRF_IDENTITYPALETTE,NULL);
   if(nRet !=SUCCESS)
      return nRet;
   /* Set the transparent color in the last position of the palette */
   TmpPalette[0].rgbBlue = (BYTE) 202;
   TmpPalette[0].rgbGreen = (BYTE) 222;
   TmpPalette[0].rgbRed = (BYTE) 212;
   nRet =LeadBitmap.PutColors(255,1,TmpPalette);
   if(nRet !=SUCCESS)
      return nRet;
   /* Create the paint palette */
   hdc = ::GetDC(hWnd);
   hpalPaint = LeadBitmap.CreatePaintPalette(hdc);
   ::ReleaseDC(hWnd, hdc);
   /* Set the playback flags that will apply to all bitmaps in the list */
   LeadBitmap.EnablePlayBackWaitUserInput(FALSE);
   LeadBitmap.EnablePlayBackTransparency(TRUE);
   LeadBitmap.SetPlayBackLeft(0);
   LeadBitmap.SetPlayBackTop(0);
   LeadBitmap.SetPlayBackDelay(10);
   LeadBitmap.SetPlayBackTransparentColor(PALETTEINDEX(255));
   LeadBitmap.SetPlayBackDisposalMethod(PLAYDISPOSE_RESTOREBACKGROUND);
   /* Create and populate the bitmap list */
   nRet =BmpList.Create();
   if(nRet !=SUCCESS)
      return nRet;
   for (i = 0; i <= 36; ++ i)
   {      
      TmpBitmap=LeadBitmap;
      /* Rotate, using the transparent color as the fill color */
      nRet =TmpBitmap.Rotate(1000*i,FALSE,PALETTEINDEX(255));
      if(nRet !=SUCCESS)
         return nRet;
      nRet =BmpList.InsertItem(&TmpBitmap);
      if(nRet !=SUCCESS)
         return nRet;
   }
   /* Set the background color for the animation playback */
   LeadBitmap.SetPlayBackBackGroundColor(RGB(0,0,255));
   TmpBitmap=LeadBitmap;
   /* Use the client area as the display rectangle */
   ::GetClientRect(hWnd,&rcDisplay);
   /* Create and run the playback */
   nRet =PlayBack.Create(&LeadBitmap,&BmpList);
   if(nRet !=SUCCESS)
      return nRet;
   do
   {
      uState=PlayBack.Process();
      switch(uState)
      {
      case PLAYSTATE_POSTRENDER:
         GetUpdateRect(hWnd, &rcUpdate,TRUE);
         hdc = ::GetDC(hWnd);
         if (hpalPaint)
         {
            hPalette = ::SelectPalette (hdc, hpalPaint, TRUE);
            ::RealizePalette(hdc);
         }
         PlayBack.GetBitmap()->SetClipSrcRect(&rcUpdate);
         PlayBack.GetBitmap()->SetDstRect(&rcDisplay);
         PlayBack.GetBitmap()->SetClipDstRect(&rcDisplay);
         PlayBack.GetBitmap()->Paint()->SetDC(hdc);
         PlayBack.GetBitmap()->Paint()->PaintDC();
         if(hpalPaint)
            SelectPalette(hdc,hPalette,TRUE);
         ::ReleaseDC(hWnd, hdc);
         break;
      }
   } while(uState != PLAYSTATE_END);
   /* Clean up */
   PlayBack.Destroy(0);
   LeadBitmap=TmpBitmap;
  
   return SUCCESS;
}