Alterar cores do menu Win32
Pergunta
Existe uma maneira de mudar as cores usadas pelos menus Win32 simples (fundo, texto e destaque) para um único processo, sem usando SetSysColors?
(SetSysColors faz uma mudança global, o que é ruim, e se você falhar ou se esqueça de definir as cores de volta com SetSysColors novamente antes de sair, eles não serão restauradas até que você sair.)
Solução
Se eu acredito que o seu comentário para Rob, é para uma aplicação de pele clara, com olhar especial e sensação. Então, o caminho a percorrer é, provavelmente, de fato, como pontos ferek fora (de forma hostil ...) para usar menus desenhados pelo proprietário:. Você será capaz de definir com precisão a sua aparência
Outras dicas
O SetMenuInfo () API é seu amigo. Ele permite que você aplicar qualquer pincel para pintar o fundo do seu menu.
Algo ao longo destas linhas deve resolver o seu problema:
MENUINFO mi = { 0 };
mi.cbSize = sizeof(mi);
mi.fMask = MIM_BACKGROUND|MIM_APPLYTOSUBMENUS;
mi.hbrBack = hBrush;
HMENU hMenu = ::GetMenu(hWnd);
SetMenuInfo(hMenu, &mi);
Eu tenho que perguntar, por quê? Adotando as do Windows regulares look-and-feel é bom; isso significa que os usuários podem ter a certeza de que existem elementos consistentes em sua interface de usuário, no qual eles podem mapear sua experiência usando outros softwares para a plataforma.
[Eu provavelmente estou pregando para os convertidos, é claro, mas eu pensei que eu ia fazer o ponto para que qualquer pessoa que lê uma resposta para isso não começar a fazer todos os seus menus céu-azul-de-rosa porque parece bonita.]