Alfa misturado controle na janela em camadas em c #
-
14-11-2019 - |
Pergunta
Eu tenho uma forma em camadas com o conjunto de estilo ws_ex_layered. Eu criei uma criança "Editar" controle usando a função API CreateWindowex (...); o controle que está lá, mas não é pintado e nada aparece no formulário.
Eu sei que ao usar o estilo ws_ex_layered em uma janela superior, a mensagem WM_Paint não é enviada mais e nem os controles filho a receberão, para que isso não apareça.
Por favor, leve em conta que a opacidade do formulário é definida para 255 e o fundo é pintado com uma imagem transparente usando API UpdateLayeredWindow (...).
Quando eu passar o mouse sobre o controle de edição, o cursor de texto aparece e eu posso copiar o texto dentro dele.
Eu acho que o problema que tenho que lidar é de alguma forma, tornando o controle para aceitar a tinta do usuário.
Eu tentei pintar o controle com a mesma técnica que a forma, e para que eu criei um DC compatível da forma, mas não sei se isso é possível, meu controle ainda não é pintado.
Deve funcionar se eu enviar o wm_printclient para esse controle? Nesse caso, o DC deve ser o formulário pai em camadas? Eu também tentei isso, mas não consegui fazer funcionar.
forma normal: http://img580.Imageshack.us/i/formy.png/
forma em camadas: http://img6.imageshack.us/i/layeredform.png/
Minha pergunta é como faço o meu controle de edição Aceite a pintar alfa-blended? Como faço para pintar um controle alfa-misturado na forma em camadas?
Solução
No final, encontrei uma maneira de fazer isso,
O que eu tinha que fazer era obter a imagem de bitmap de cada controle e desenhar no fundo do formulário assim ... Quando eu apliquei UpdateLayeredWindow para o formulário, o formulário Bitmap continha todos os controles,
Eu ainda não sei se esta é uma prática melhor, embora
O método funciona bem, mas eu tenho que aperfeiçoar e adicionar mais interação + controles alfanejados .. Por outro lado, a funcionalidade está lá