Cambiare colore dei componenti

lunedì 19 maggio 2008 - 10.01

redcloud Profilo | Newbie

Salve, sto lavorando su un'applicazione scritta in MFC con Visual Studio 2005 e vorrei poter cambiare il tema dei componenti. Se non sbaglio, con Visual Studio 2003 era possibile cambiare il colore di background di una dialog semplicemente scegliendolo nell'editor dell'IDE. Nel 2005 invece non v'è traccia di questa opzione. Suggerimenti?

Brainkiller Profilo | Guru

>Salve, sto lavorando su un'applicazione scritta in MFC con Visual
>Studio 2005 e vorrei poter cambiare il tema dei componenti. Se
>non sbaglio, con Visual Studio 2003 era possibile cambiare il
>colore di background di una dialog semplicemente scegliendolo
>nell'editor dell'IDE. Nel 2005 invece non v'è traccia di questa
>opzione. Suggerimenti?

Ciao,
io non sono la persona più adatta a rispondere a domande di questo tipo.
Però so che è sufficiente gestire l'evento OnCtlColor come indicato in questo articolo per colorare lo sfondo non solo di una dialog ma anche i controlli in essa contenuti:
http://support.microsoft.com/kb/117778

Nell'esempio riportato viene modificato il colore di una MessageBox e di una EditBox (anche se manca il codice). Per modificare il background della DialogBox prova a gestire il seguente case:

case CTLCOLOR_DLG:

Ricordo anche io vagamente che nel VC++ 6.0 c'era la possibilità di modificare il colore da IDE ma nel 2005 non l'ho trovato neanche io.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

redcloud Profilo | Newbie

Grazie, avevo visto anche io quell'esempio ma secondo quanto scritto, ogni volta che voglio cambiare colore di un componente (una label, un button, un qualsiasicosa) devo crearne uno nuovo che erediti il componente base? E' un lavoraccio se devo fare un tema completo per un'intera applicazione

Brainkiller Profilo | Guru

>Grazie, avevo visto anche io quell'esempio ma secondo quanto
>scritto, ogni volta che voglio cambiare colore di un componente
>(una label, un button, un qualsiasicosa) devo crearne uno nuovo
>che erediti il componente base? E' un lavoraccio se devo fare
>un tema completo per un'intera applicazione

Come tema intendi una Sking tipo Winamp o Media Player ?


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

redcloud Profilo | Newbie

No, semplicemente cambiare i colori di tutti i componenti utilizzati nell'applicazione.

Brainkiller Profilo | Guru

>No, semplicemente cambiare i colori di tutti i componenti utilizzati
>nell'applicazione.

Io ho guardato solo il codice e non ho ereditato niente. Ho copiato e incollato e funziona come ho indicato. L'utilità del case è che si può specificare appunto a che categoria di controlli cambiare il colore.

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

redcloud Profilo | Newbie

Ah capito! Ma se volessi usare questo tipo di rendering per tutta l'applicazione? Per esempio, potrei usare quel codice nella WinApp così qualsiasi componente che inserirò in futuro sarà renderizzato senza doverci mettere più mano?

Brainkiller Profilo | Guru

>Ah capito! Ma se volessi usare questo tipo di rendering per tutta
>l'applicazione? Per esempio, potrei usare quel codice nella WinApp
>così qualsiasi componente che inserirò in futuro sarà renderizzato
>senza doverci mettere più mano?

Teoricamente sì. Dipende se i nuovi controlli che inserisci deriveranno da qualche altro controllo che hai inserito nel case e che quindi viene colorato. Tipo se dalla classe CButton derivi un tuo button dovrebbe venire colorato anche quello assieme agli altri normali.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

redcloud Profilo | Newbie

Mmm con i button non funziona :(

Brainkiller Profilo | Guru

>Mmm con i button non funziona :(

Hai ragione.
Mi sono documentato anche io.
Dai un'occhiata qui:
http://www.codeguru.com/buttonctrl/color_button.shtml

L'autore dell'articolo ha scritto una classe ad hoc scaricabile per creare button colorati.
E' open quindi puoi vedere la logica.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5