WIN32 API: difficoltà a eliminare dallo schermo immagine.bmp

di il
4 risposte

WIN32 API: difficoltà a eliminare dallo schermo immagine.bmp

Gentilisimi,
sono una new entry del Forum e mi diletto, per passatempo con C++ e con WIN32 API. (con WIN32 API sono all'inizio: sto consultando guide e tutorial)

Precedentemente ho risolto una problematica di calcolo strutturale che volevo tradurre in un software: l'ho già fatto in C++.
Adesso volendo dare, al software in C++, un aspetto più professionale ed elegante, tipo window, mi diletto con WIN32 API.

Ho creato una finestra con tre BUTTON di scelta, tre LABEL descrittive e un'immagine.bmp di sfondo.
Ho fatto in modo che, cliccando indifferentemente su uno dei BUTTON di scelta, spariscano i BUTTON, le LABEL e si ingrandisca
la finestra a tutto schermo e questo OK, ma non riesco a far sparire l'immagine.bmp per avere l'area Client
libera in bianco.

Ho cercato in tutto il WEB ma trovo solo spezzoni di programma ,WIN32 API, che fanno comparire immagini ma nulla di esaustivo per farle sparire.

Chiedo gentilmente se qualcuno potesse darmi qualche indicazione.

Invio per maggior chiarezza lo spezzone di
codice qui di seguito (WM_CREATE e WM_PAINT) che crea e visualizza l'immagine.
Naturalmente ho creato anche un file.rc dove ci sono i dati per l'immagine: IDB_PONTE

Grazie anticipatamente

Spezzone di codice:

case WM_CREATE:{
  g_hbmPonte = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_PONTE));  
  if(g_hbmPonte==NULL){
   MessageBox(hwnd, "Non posso caricare l'immagine!", "Errore", MB_OK | MB_ICONEXCLAMATION);
  }
  ............    
  ............
 } 
 break;
case WM_PAINT:{
BITMAP bm; 
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
	HDC hdcMem = CreateCompatibleDC(hdc);
	HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_hbmPonte);
	GetObject(g_hbmPonte, sizeof(bm), &bm);
	BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY); //Fa comparire l'immagine    
	SelectObject(hdcMem, hbmOld);
	DeleteDC(hdcMem);                 
EndPaint(hwnd, &ps);
}
break;

4 Risposte

  • Re: WIN32 API: difficoltà a eliminare dallo schermo immagine.bmp

    Ciao.
    Messaggio notato solo ora, anche perché forse andava postato sotto la sezione C/C++.

    In teoria basterebbe distruggere l'immagine interessata con un'istruzione del tipo:

    if(g_hbmPonte)
    {
       DeleteObject(g_hbmPonte);
       g_hbmPonte = NULL;
    }
    InvalidateRect(hwnd, NULL, TRUE); // per aggiornare la finestra

    e racchiudere il blocco contenuto nel case WM_PAINT relativo alla sua visualizzazione in un'analoga istruzione if che verifichi la presenza di una immagine:

    if(g_hbmPonte)
    {
    	HDC hdcMem = CreateCompatibleDC(hdc);
    	HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_hbmPonte);
    	GetObject(g_hbmPonte, sizeof(bm), &bm);
    	BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY); //Fa comparire l'immagine    
    	SelectObject(hdcMem, hbmOld);
    	DeleteDC(hdcMem);
    }
  • Re: WIN32 API: difficoltà a eliminare dallo schermo immagine.bmp

    Molte Grazie della risposta euscar, in effetti ho risolto con: 

     InvalidateRect(hwnd,NULL,TRUE)

    e relativo blocco,  ancora graze.

    GigaaNoce

  • Re: WIN32 API: difficoltà a eliminare dallo schermo immagine.bmp

    Di niente ;)

    A proposito di Win32, anch'io mi diletto con tali API … ho iniziato lo scorso autunno, perché interessato ad aggiungere la parte grafica alla mia programmazione in linguaggio C, tutto in puro C sotto Dev-C++ senza utilizzare altri strumenti.
    Tra il vario materiale reperibile in rete, ho trovato molto utili questi due tutorial in inglese, se già non li conosci:

    http://www.winprog.org/tutorial/start.html

    https://zetcode.com/gui/winapi/

    Poi ho trovato anche questo in italiano, ma secondo me bisogna avere già un po' di dimestichezza per poterlo seguire bene (lo riprenderò in considerazione quando avrò maggiore familiarità con le Windows API):

    http://www.aleax.it/TutWin32/tc.htm

  • Re: WIN32 API: difficoltà a eliminare dallo schermo immagine.bmp

    Grazie euscar,

    dei link indicati

    uso anch'io Dev-C++ e per Win32 uso l'icona

    Windows Application e poi consulto un po'

    di qua e di la' ma non e' facile entrare nella logica di win32, comunque si tira avanti.

    ciao

    buona giornata

Devi accedere o registrarti per scrivere nel forum
4 risposte