Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80

    [Win32 C++] Problema con background trasparente

    Ciao a tutti,
    in una applicazione Win32 in C++ ho settato il background di un controllo static a trasparente in questo modo:

    codice:
    info = CreateWindowEx(WS_EX_TRANSPARENT, "STATIC", "", WS_CHILD | WS_VISIBLE, 280, 100, 200, 200, hwnd, (HMENU) ID_INFO, hInstance, 0);
    
    .....
    
    case WM_CTLCOLORSTATIC:
        if((HWND) lParam == info){
    	DWORD id = GetDlgCtrlID(info);
    	if(id==ID_INFO){
    		SetBkMode((HDC) wParam, TRANSPARENT);
    		return (LRESULT) GetStockObject(NULL_BRUSH);
    	}
        }
    break;
    Il problema è che quando ci scrivo sopra con SetWindowText, il testo contenuto in precedenza non viene cancellato e quello nuovo si sovrappone al vecchio, rendendo il tutto illeggibile! Se il background non è trasparente non ci sono questi problemi. Come mai? Come posso risolverlo?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Nessuno??

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Perché hai impostato lo sfondo trasparente?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Perchè nel background della finestra principale c'è un immagine, per cui devo mettere lo sfondo trasparente altrimenti si crea un quadrato grigio della dimensione del controllo static!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Sart
    Perchè nel background della finestra principale c'è un immagine, per cui devo mettere lo sfondo trasparente altrimenti si crea un quadrato grigio della dimensione del controllo static!
    Beh ... bisogna che tu le dia tutte le informazioni altrimenti non si capisce il problema ...!

    Quindi, prima di scrivere la nuova stringa, ridisegna l'immagine.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Per ridisegnarlo non basta scrivere UpdateWindow(hwnd)?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... solo se hai invalidato la parte che vuoi ridisegnare con la InvalidateRect
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Per cui dopo aver creato la static la invalido?
    InvalidateRect(info, NULL, FALSE);

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda ... dipende dal resto del codice ... da come e dove visualizzi l'immagine, da quando visualizzi il testo ... non si può rispondere senza avere tutto il quadro chiaro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Sì hai ragione..
    Allora: disegno lo sfondo quando arriva il messaggio WM_PAINT.
    Per cui:
    codice:
    case WM_PAINT:
        BITMAP img;
        PAINTSTRUCT pt;
        ....
    break;
    Creo la static quando quando viene creata la finestra, per cui:
    codice:
    case WM_CREATE:
        info = CreateWindowEx(...);
        InvalidateRect(info, NULL, FALSE);
    break;
    Infine, ogni volta che devo aggiornarla, richiamo la mia funzione aggiorna:
    codice:
    void aggiorna(HWND hwnd){
        .....
        UpdateWindow(hwnd);
        SetWindowtext(info, buffer);
    }
    E' chiaro così?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.