Pregunta

¿Hay una manera de cambiar los colores utilizados por los menús normales de Win32 (fondo, texto y resaltado) para un solo proceso, sin usar SetSysColors?

(SetSysColors hace un cambio global, que es malo, y si falla o olvida volver a configurar los colores con SetSysColors antes de salir, no se restaurarán hasta que cierre la sesión).

¿Fue útil?

Solución

Si creo en tu comentario para Rob, es para una aplicación de piel, con una apariencia especial. Entonces, probablemente el camino a seguir es, como señala ferek (de una manera poco amistosa ...) el uso de menús dibujados por el propietario: podrá definir con precisión su aspecto.

Otros consejos

La API SetMenuInfo () es tu amigo. Te permite aplicar cualquier pincel para pintar el fondo de tu menú.

Algo en estas líneas debería resolver tu problema:

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

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

Tengo que preguntar, ¿por qué? Adoptar el aspecto y la apariencia de Windows es bueno; significa que los usuarios pueden estar seguros de que hay elementos coherentes en su interfaz de usuario, en los que pueden mapear su experiencia utilizando otro software para la plataforma.

[Probablemente le esté predicando a los conversos, por supuesto, pero pensé que lo haría para que cualquiera que lea una respuesta para esto no comience a hacer que todos sus menús se vean azul-rosado porque se ve bonita.]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top