Modifica dei colori del menu Win32
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.)
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.]