Domanda

Esiste un modo per cambiare i colori usati dai semplici menu Win32 (sfondo, testo ed evidenziazione) per un singolo processo, senza usando SetSysColors?

(SetSysColors esegue una modifica globale, il che è negativo e se si arresta in modo anomalo o si dimentica di ripristinare nuovamente i colori con SetSysColors prima di uscire, non verranno ripristinati fino al logout.)

È stato utile?

Soluzione

Se credo che il tuo commento a Rob, sia per un'applicazione skin, con un aspetto speciale. Quindi la strada da percorrere è probabilmente, come sottolinea Ferek (in modo ostile ...) per utilizzare i menu disegnati dal proprietario: sarai in grado di definire con precisione il loro aspetto.

Altri suggerimenti

L'API SetMenuInfo () è tua amica. Ti consente di applicare qualsiasi pennello per dipingere lo sfondo del tuo menu.

Qualcosa del genere dovrebbe risolvere il tuo problema:

MENUINFO mi = { 0 }; 
mi.cbSize = sizeof(mi); 
mi.fMask = MIM_BACKGROUND|MIM_APPLYTOSUBMENUS; 
mi.hbrBack = hBrush; 

HMENU hMenu = ::GetMenu(hWnd); 
SetMenuInfo(hMenu, &mi); 

Devo chiedere, perché? Adottare il normale aspetto di Windows è buono; significa che gli utenti possono essere certi che ci sono elementi coerenti nell'interfaccia utente, su cui possono mappare la loro esperienza utilizzando altri software per la piattaforma.

[Probabilmente sto predicando al convertito, ovviamente, ma ho pensato di fare il punto in modo che chiunque legga una risposta per questo non inizi a rendere tutti i loro menu azzurro-rosa perché sembra carina.]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top