Immagine .jpg come sfondo di finestra gui

di il
6 risposte

Immagine .jpg come sfondo di finestra gui

Hi bit-pal,
grazie al vostro aiuto ho cominciato a capire qualcosa e ho superato le difficoltà incontrate finora.
Ora, nelle finestre del programma in costruzione, vorrei inserire come sfondo non un colore ma un'immagine .jgp importandola da una directory nel computer.
l'ambiente é : CodeBlocks + minGW + Win32 GUI + C++
Qualche suggerimento di dove posso documentarmi ? Esempi fatti ? Qualche idea ?
Grazie.

6 Risposte

  • Re: Immagine .jpg come sfondo di finestra gui

    Ehi, ti sei buttato molto avanti!
    Ci sono diversi metodi, ti mostro il più immediato.
    Prima di tutto dovrai caricare una immagine da poter utilizzare:
    HBITMAP hBmp = LoadBitmap( hInstance, MAKEINTRESOURCE( IDB_BITMAP ); 
    IDB_BITMAP è il riferimento ID del file caricato nel file delle risorse, suppongo tu lo sappia già.

    Poi, avrai una classe (che è solo una struttura) della tua finestra:
    WNDCLASSEX wcx;
    Nel campo dello sfondo ci metti l'immagine:
    wcx.hbrBackground = ...;
    Siccome il campo .hbrBackground prende solo l'handler di un "brush", dovrai generarlo in qualche modo. Ad esempio:
    HBRUSH Hbrush = CreatePatternBrush(hBmp);
    In sintesi:
    wcx.hbrBackground = (HBRUSH)LoadBitmap( hInstance, MAKEINTRESOURCE(IDB_BITMAP) );

    La funzione LoadBitmap è deprecata, e fornita solo per retrocompatibilità. Sostituiscila con LoadImage, anche se richiede qualche parametro in più.

    Consiglio sempre di consultare la documentazione su docs.microsoft, in particolare la documentazione relativa alle GDI (wingdi.h) perché altri metodi e altre possibilità richiedono di padroneggiare i Device Context.
  • Re: Immagine .jpg come sfondo di finestra gui

    Ok Unqualunque , ci studio sopra , grazie
  • Re: Immagine .jpg come sfondo di finestra gui

    Rileggendo mi sono accorto che nella sintesi finale ho omesso la funzione che avevo appenda introdotto, dunque l'espressione corretta:
    wcx.hbrBackground = CreatePatternBrush( LoadBitmap( hInstance, MAKEINTRESOURCE(IDB_BITMAP) ));
    Se qualcosa non ti funziona o qualche passaggio ti è oscuro, chiedi sempre
  • Re: Immagine .jpg come sfondo di finestra gui

    Ciao Unqualunque,
    sicuramente mi stai sopravvalutando. Sono alle primissime armi in un contesto GUI. Incomincio a capire qualcosa ma ci sono molti impliciti che per me non sono affatto scontati. Nella tua risposta sono incagliato nel concetto di IDB_BITMAP , riferimento ID caricato nel file delle risorse.
    Io parto da un file .jpg nella stessa directory del .exe che vorrei importare come sfondo nello schermo che poi gestirà la/e finestra/e . Non ho caricato niente nei files delle risorse, che non so ancora a cosa servano.
    Ri-grazie per l'attenzione e buon fine settimana.
  • Re: Immagine .jpg come sfondo di finestra gui

    Scusa, l'avevo dato per scontato perché è pratica comune. Si tratta di un file di script che automatizza la gestione delle risorse e ha estensione .rc. È una specifica Microsoft. Alcuni compilatori integrano il Resource Compiler che interpreta questo script, mentre altri per farlo hanno bisogno di un modulo aggiuntivo. Mi pare che per minGW si utilizzi windres. Ti consiglio di approfondire l'argomento perché è un grande aiuto. Visual Studio e altri compilatori possiedono anche un editor visuale per la creazione automatica del codice di script delle risorse, in pratica ti generi i controlli in pochi click.

    Comunque, puoi caricare il file direttamente:
    wcx.hbrBackground = CreatePatternBrush( (HBITMAP)LoadImage(0, "BkgImage.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) );
  • Re: Immagine .jpg come sfondo di finestra gui

    Ok Unqualunque, ci provo. Ri-grazie
Devi accedere o registrarti per scrivere nel forum
6 risposte