Newsgroup: it.comp.programmare.win32
Titolo: MFC : CStatic & Bitmap





Salve


Vorrei chiedere a qualcuno se ha provato a far 
visualizzare in un controllo statico, per il quale definisco una variabile 
CStatic una bitmap che vorrei caricare da un file.


Per intenderci una sorta di preview scorrendo una 
lista di file btm.


 


Grazie a chi mi vorrà aiutare


 



...

Prova a cercare su 
    
www.codeguru.com
;


immagino che gia' piu' di qualcuno abbia 
    affrontato il problema!


 


Ciao,


Gianfranco


 



 quale definisco una variabile CStatic una bitmap che vorrei caricare da un file.
Non e' difficile.  CStatic ha una funzione membro SetBitmap, a cui basta
passare l'HBITMAP che ti interessa; l'API LoadImage, ponendo fra i suoi
flag di opzione LR_LOADFROMFILE, ti permette di caricare una bitmap
da file (torna una generica HANDLE perche` puo` caricare diversi tipi
d'immagine, ma se come tipo d'immagine tu le hai richiesto appunto
una IMAGE_BITMAP, puoi semplicemente fare cast del valore di ritorno
alla HBITMAP che ti serve).
Ricorda solo di usare bene l'API DeleteObject sulle HBITMAP che non
usi piu` (la gia `detta SetBitmap ti torna la bitmap precedente quando
imposti la nuova) per evitare spreco di risorse -- non cancellare,
invece, la bitmap tornata dalla tua PRIMA chiamata a SetBitmap
su di un dato oggetto CStatic, perche` quella non l'hai impostata
tu.
Alex

...


Salve


Vorrei chiedere a qualcuno se ha provato a far 
    visualizzare in un controllo statico, per il quale definisco una variabile 
    CStatic una bitmap che vorrei caricare da un file.




 


 wrote in message news:84a0dv$2p1$2...@nslave1.tin.it...
    [snip di un mucchio di HTML]
Non postare sulle news in HTML; usa semplice testo, e` lo standard.
Il membro LoadBitmap dell'oggetto CBitmap la carica da una delle
risorse del tuo programma, NON da un file .bmp.  Usa invece, come
ti ho detto, l'API LoadImage:
    HBITMAP hb = 
        (HBITMAP)LoadImage(0, "pippo.bmp", IMAGE_BITMAP,
            0, 0, LR_LOADFROMFILE);
e poi chiama la funzione membro SetBitmap del tuo oggetto di
tipo CStatic passandole hb come unico parametro.
Dovrai preoccuparti di cancellare le HBITMAP ormai inutili
corrispondenti a immagini da te in precedenza caricate, se
fai molti caricamenti.
Alex

 wrote in message


 codice mi da errore nella riga ha= HBITMAP(Im).
Non dichiarare due variabili nella stessa istruzione (la prima riga), e`
una brutta prassi; cambia a
    HBITMAP ha;
    HBITMAP hb = ecc
comunque non credo che sia questo e non vedo quale sia l'errore,
quindi dicci almeno che messaggio ti da` il tuo compilatore.
Quando sarai riuscito a compilare questo, non fara` quel che
desideri, secondo me, perche` non hai capito bene il ruolo
di SetBitmapDimension (che si limita ad associare ad una
HBITMAP un paio di 'dimensioni', pero` il sistema non le usa,
sono li` solo per eventuale uso da parte del TUO codice).
Inoltre non si capisce perche` il passaggio dalla CBitmap
intermedia Im; se proprio vuoi fare la SetDimension, e`
piu` comodo chiamare direttamente l'API
    SetDimensionEx(hb, 300, 200, 0)
che non metterci 3 istruzioni + 1 dichiarazione per fare la
stessa cosa senza alcun particolare vantaggio.
Per scalare una bitmap quando la mostri, devi usare la
API StretchBlt, o altre analoghe.  Non credo che ci sia
modo di dire a un CStatic di fare questo, quindi dovresti
scalare tu la bitmap _prima_ di metterla nel CStatic. A
questo punto se usi StretchDIBits e sei su Win98, le
potresti passare direttamente anche una JPEG o PNG
(dovrebbe funzionare anche su NT5, cioe` Win2000,
ma non su NT4 ne` su Win95, mi pare; non ho mai
provato questa funzionalita`).
Hai guardato su 
www.codeguru.com
 se c'e` gia`
qualcosa che fai quel che desideri?  Di solito c'e`...
Alex