comportamento estranho de editar cor de fundo de controle ao usar controles comuns WinXP
-
06-07-2019 - |
Pergunta
Estou tendo um problema estranho (bem, pelo menos eu encontrá-lo = estranhos)). Estou escrevendo a minha própria biblioteca GUI, que é um invólucro em torno da API do Windows (e sim, eu estou ciente de WTL e frameworks como MFC =)). No estágio atual eu tenho incapsulated controles comuns em tal maneira: por exemplo, Editar classe consiste em uma simples janela e uma janela de edição padrão acima dela (MainWindow -> GhostWindow -> EditBox). É assim que eu posso, por exemplo, mudança de uma cor de fundo de uma edição dentro de uma classe em si edit:
myedit->SetBkColor ( RGB ( 0, 0, 0 ) );
E funcionou bem, até que eu chamei InitCommonControlsEx e anexado arquivo de manifesto para meu programa. Após fazer isso, as minhas edições tornam-se capazes de mudar as cores apenas quando têm foco. Para ser honesto, eu não tenho um pensamento abrangentes sobre por que se comportam como este e o que estou fazendo de errado, então eu aprecio qualquer ajuda.
Obrigado, # 535.
Solução 2
Bem, tudo é muito mais fácil do que eu pensava. Eu estava apenas = muito desatento (Quando um não usar styling, uma cana de uso :: SetBkColor (...) a cor mudança de fundo, e retornar uma escova de WM_CTLCOLOR * para mudar a cor da borda. As coisas se tornam diferente depois de ativar styling . Agora :: SetBkColor (...) correspondem a focagem cor e escova de retornar muda de cor de fundo. Shame on me = (
Outras dicas
-
Quando você anexa a versão 6 manifesto, a chamada para InitCommonControlsEx torna-se desnecessário.
-
De qualquer forma. Com a versão 6 controles comuns carregado, XP theming é usado até mesmo para os controles padrão do Windows. As cores de fundo para os controles são pintadas usando a cor xp-tema, de modo que o WM_CTLCOLOR * mensagens são usadas menos.
-
Você está substituindo o coolor de vários elementos de controle usando o WM_CTLCOLOR * mensagens?