/ / Creazione di controlli trasparenti personalizzati: mfc, controlli, trasparenza, alphablending, ordine z

Creazione di controllo trasparente personalizzato: mfc, controlli, trasparenza, alphablending, ordine z

Sto cercando di creare un controllo personalizzato che visualizzi una bitmap con alphablend per pixel (come alcuni di voi sanno già per altre domande).

In questo momento sto usando un controllo personalizzato ineditore di risorse e lo allego a una classe derivata da CWnd. Quando registro la mia classe personalizzata, ho impostato hbrBackground della struttura WNDCLASS su NULL_BRUSH per ottenere la trasparenza del controllo.

In OnPaint del controllo uso AlphaBlend per dipingere la bitmap di fusione alfa per pixel.

Funziona abbastanza bene ma ho questi due problemi:

  • Voglio cambiare la bitmap visualizzata quandoil mouse è sopra il controllo. Poiché il controllo è trasparente, le aree in cui una bitmap che non sono sovrapposte dall'altra bitmap non vengono cancellate. Come posso cancellare lo sfondo quando l'immagine viene cambiata?

  • Il secondo problema è legato a duecontrolli sovrapposti. Il mio controllo è dipinto su un altro controllo che ha un gradiente (in realtà è all'interno di un altro controllo). Il problema è che se metto il mio controllo prima nell'ordine z, gli altri controlli si sovrappongono al mio controllo e il mio non viene visualizzato. Se inserissi l'altro controllo prima nell'ordine z, non potrei ottenere il messaggio del mouse nel mio controllo.

Forse sto facendo qualcosa di sbagliato o sbaglio nel modo in cui sto cercando di attuare il mio controllo. Qualsiasi tipo di aiuto sarebbe apprezzato.

Grazie,

Javier

risposte:

1 per risposta № 1

Prenderò una possibilità. :-)

Questo dovrebbe darti tutto ciò di cui hai bisogno per realizzare ciò che penso tu voglia.

Soluzione generale per controlli trasparenti

Per quanto riguarda i problemi relativi all'ordine Z, l'ordine z non influisce sulla priorità del messaggio. Dovrai pubblicare del codice in modo da poter determinare cosa sta succedendo lì.