Newsgroup: it.comp.programmare.win32
Titolo: :-( vi preeeegooo!!

come faccio a mettere un .bmp come sfondo?????
sia da file ke da risorsa x favore!!!
VI PREEEEGOOOOO!!!!
;-)!!!


wrote:


scusa hai ragione, mi sono spiegato male io!!!
intendevo come sfondo della mia finestra!!!
diciamo ke copiando un pò da alcuni esempi ce l'ho quasi fatta solo ke:
1) non c'ho capito niente di quello ke ho fatto
2) la grandezza del bitmap non viene ridimensionataa seconda della finestra
io posto il codice ke ho usato, se qlcno potrebbe gentilmente spiegarmi
qlcosa (le cose + difficili...) e se mi potete spiegare come stampare una
bitmap ridimensionata a seconda della finestra!!!
grazie mille
K
DrawBitmap (hFinestra,GetBitmap(hFinestra,hInst,FALSE));
VOID DrawBitmap (HDC hdc, HBITMAP hbm)
{    BOOL f;
     HDC hdcBits;
     BITMAP bm;
  hdcBits = CreateCompatibleDC(hdc);
     GetObject (hbm, sizeof(BITMAP), &bm);
     SelectObject(hdcBits,hbm);
     f = BitBlt(hdc,0,0,bm.bmWidth, bm.bmHeight,hdcBits,0,0,SRCCOPY);  /* è
forse questa la riga x le dimensioni??*/
     DeleteDC(hdcBits);
}
HBITMAP GetBitmap (HDC hdc, HANDLE hInst, BOOL monochrome)
{
 HBITMAP hbm;
 PBITMAPFILEHEADER pbmfh;
 PBITMAPINFOHEADER pbmih;
 PBYTE             pBits;
 int fh;
 int bfOffBits;
 int nbytes;
 OPENFILENAME  of;
 char buffer [MAX_PATH];
 buffer[0] = 0;
 of.lStructSize       = sizeof (OPENFILENAME);
 of.hwndOwner         = NULL;
 of.hInstance         = hInsta;
 of.lpstrCustomFilter = NULL;
 of.nMaxCustFilter    = 0;
 of.nFilterIndex      = 0;
 of.lpstrFile         = buffer;
 of.nMaxFile          = MAX_PATH;
 of.lpstrFileTitle    = NULL;
 of.nMaxFileTitle     = 0;
 of.lpstrInitialDir   = "c:\\";
 of.lpstrTitle        = NULL;
 of.Flags             = OFN_HIDEREADONLY;
 of.nFileOffset       = 0;
 of.nFileExtension    = 0;
 of.lpstrDefExt       = NULL;
 of.lCustData         = 0;
 of.lpfnHook          = NULL;
 of.lpTemplateName    = NULL;
 if (PRIMARYLANGID(GetUserDefaultLangID ()) == LANG_JAPANESE)
  of.lpstrFilter       = "        (*.bmp)\000 *.BMP\000\000";
 else
  of.lpstrFilter       = "Bitmaps\000 *.BMP\000\000";
 if (!GetOpenFileName (&of))
  return NULL;
 fh = _lopen (buffer, OF_READ);
 if (fh == -1)
  return NULL;
 nbytes = GetFileSize ((HANDLE) fh, NULL);
 if (!(pbmfh = (PBITMAPFILEHEADER)LocalAlloc (LPTR, sizeof
(BITMAPFILEHEADER))))
  return NULL;     _lread (fh, (LPSTR)pbmfh, sizeof (BITMAPFILEHEADER));
 bfOffBits=pbmfh->bfOffBits;
 if (!(pbmih = (PBITMAPINFOHEADER)LocalAlloc (LPTR, bfOffBits- sizeof
(BITMAPFILEHEADER))))
  return NULL;     _lread (fh, (LPSTR)pbmih, bfOffBits- sizeof
(BITMAPFILEHEADER));
 if (!(pBits = (PBYTE)LocalAlloc (LPTR, (nbytes - bfOffBits)))) return NULL;
 _lread (fh, (LPSTR)pBits, (nbytes - bfOffBits));
 if (monochrome)
  if (pbmih->biBitCount != 1)
  {
   MessageBox (NULL,/*GetStringRes (IDS_MONOCHROME)*/"BOO",NULL,
MB_APPLMODAL | MB_ICONSTOP | MB_OK);
   hbm = NULL;
     }
  else
  {
   BITMAP bmpInf;
   memset( &bmpInf, 0, sizeof(bmpInf) );
   bmpInf.bmWidth = pbmih->biWidth; bmpInf.bmHeight = pbmih->biHeight;
   bmpInf.bmWidthBytes = ((pbmih->biWidth+31)&(~31))/8;
   bmpInf.bmPlanes = pbmih->biPlanes;
   bmpInf.bmBitsPixel = pbmih->biBitCount; bmpInf.bmBits = pBits;
   hbm = CreateBitmapIndirect ( &bmpInf );
      }
 }
 else
 hbm = CreateDIBitmap (hdc, pbmih, CBM_INIT, pBits, (PBITMAPINFO) pbmih,
DIB_RGB_COLORS);
LocalFree (LocalHandle ((LPSTR)pBits));
LocalFree (LocalHandle ((LPSTR)pbmih));
LocalFree (LocalHandle ((LPSTR)pbmfh));
_lclose (fh);
return hbm;
}

che casino!
comunque se usi StretchBlt invece che BitBlt puoi dare alla Bitmap la
dimensione che preferisci

maaarņņnna mia, č vero!!!! EVVAIIII!!!
vi spiace se kiedo un'altra cosa ancora??? questo pezzo di codice usa la
OpenFile
x aprire il file, quindi viene aperta una "dialog box" in cui l'utente
sceglie il file che viene visualizzato...
siccome xņ il file lo devo decidere io, ke faccio??? elimino tutta la parte
relativa alla OpenFile e uso la CreateFile???
Grazie x le risposteee

altro problemino, l'immagine deve rimanere fissa!!!!
siccome continuo a stampare e cancellare punti sull'area client, ke faccio:
ogni volta ristampo lo sfondo???? non c'è un modo di creare qualcosa di
simile ai "livelli" di autocad in modo ke lo sfondo non venga toccato???

si lo so ke rompo le balle ma siccome CI DEVO riuscire io continuo a
scassare!!!
allora: ho pensato di memorizzare i pixel ke vengono cancellati, x poi
logicamente rimetterli, ma cosi occuperei un sacco di spazio tenendo conto
ke x ogni quadratino dovrei memorizzare 144 pixel (12X12) e possono esserci
fino a 20 quadrati...
ristampando xň ogni volta lo sfondo ottengo solo una skifezza!!!
ke faccio????
essů da bravi,aiutatemi!!!;-)!!