Newsgroup: it.comp.programmare.win32
Titolo: Bitmap e Resource Template

Ragazzi scusatemi,
ma nessuno mi sa dare un tutorial dove spiega come inserire un bitmap in un
resource template, che facci parte o di un exe o di una dll, e poter caricare
questa immagine magari sulla surface di una DirectDraw?
Grazie
NighTiger
Vuoi ricaricare il tuo telefonino gratis? Clikka
http://www.smscash.it/index.php3?pagid=reg&p_form=P&p_pres=0&cpre=268221&p_desc=
1

Posto il codice del SDK per caricare su una SurfaceDirectDraw una bitmap:
Questa procedura prima tenta di caricare la bitmap dal resource template e poi da un
file
su disco:
Se vogliamo mettere invece la bitmap su una DLL bisognerà modificare leggermente il
codice,
sostituendo a GetModuleHandle(NULL) l'handle della DLL che verrà passato come
parametro.
/*
 *  DDReLoadBitmap
 *
 *  load a bitmap from a file or resource into a directdraw surface.
 *  normaly used to re-load a surface after a restore.
 *
 */
HRESULT DDReLoadBitmap(IDirectDrawSurface *pdds, LPCSTR szBitmap)
{
    HBITMAP             hbm;
    HRESULT             hr;
    //
    //  try to load the bitmap as a resource, if that fails, try it as a file
    //
    hbm = (HBITMAP)LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION);
    if (hbm == NULL)
    hbm = (HBITMAP)LoadImage(NULL, szBitmap, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    if (hbm == NULL)
    {
      OutputDebugString("handle is null\n");
      return E_FAIL;
    }
    hr = DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
    if (hr != DD_OK)
    {
 OutputDebugString("ddcopybitmap failed\n");
    }
    DeleteObject(hbm);
    return hr;
}
/*
 *  DDCopyBitmap
 *
 *  draw a bitmap into a DirectDrawSurface
 *
 */
extern "C" HRESULT DDCopyBitmap(IDirectDrawSurface *pdds, HBITMAP hbm, int x, int y,
int dx, int dy)
{
    HDC                 hdcImage;
    HDC                 hdc;
    BITMAP              bm;
    DDSURFACEDESC       ddsd;
    HRESULT             hr;
    if (hbm == NULL || pdds == NULL)
 return E_FAIL;
    //
    // make sure this surface is restored.
    //
    pdds->Restore();
    //
    //  select bitmap into a memoryDC so we can use it.
    //
    hdcImage = CreateCompatibleDC(NULL);
    if (!hdcImage)
 OutputDebugString("createcompatible dc failed\n");
    SelectObject(hdcImage, hbm);
    //
    // get size of the bitmap
    //
    GetObject(hbm, sizeof(bm), &bm);    // get size of bitmap
    dx = dx == 0 ? bm.bmWidth  : dx;    // use the passed size, unless zero
    dy = dy == 0 ? bm.bmHeight : dy;
    //
    // get size of surface.
    //
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
    pdds->GetSurfaceDesc(&ddsd);
    if ((hr = pdds->GetDC(&hdc)) == DD_OK)
    {
 StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y, dx, dy,
SRCCOPY);
 pdds->ReleaseDC(hdc);
    }
    DeleteDC(hdcImage);
    return hr;
}
/-----------------------------------------------------------------
Per includere in modo semplice una bitmap in un resource template basta aggiungere
queste
righe (con un editor di testo) nel file .rc:
"NomeDellaRisorsa"        BITMAP  DISCARDABLE     "file.bmp"
es
"TITLE" BITMAP DISCARDABLE "title.bmp"
--
[ PMSoftware ]
 
http://pmsoftware.tripod.com
    [ we make your dream come true ]