Aero: Como desenhar cores sólidas (opacas) no vidro?

Usando GDI + para desenhar várias cores:

brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);

Você notará que nenhuma cor opaca aparece corretamente no vidro:

Como desenho cores sólidas no vidro?

Você também notará que uma cor totalmente opaca é tratada de maneira diferente, dependendo da cor:

preto opaco: totalmente transparentecor opaca: parcialmente transparentebranco opaco: totalmente opaco

Alguém pode me indicar a documentação do compositor da área de trabalho que explica como as cores diferentes são manipuladas?

Atualização 3

Você também notará queFillRectangle se comporta de maneira diferenteFillEllipse:

FillEllipse com uma cor opaca desenha uma cor opacaFillRectangle com uma cor opaca desenha parcialmente (ou totalmente) transparente

Explicação para comportamento não sensorial, por favor.

Atualização 4

Sempre aprendendo sugerido que eu mude o modo de composição. DeMSDN:

Enumeração CompositingMode

oCompositingMode enumeração especifica como as cores renderizadas são combinadas com as cores de fundo. Essa enumeração é usada peloGraphics::GetCompositingMode e'Graphics :: SetCompositingMode' métodos doGráficos classe.

CompositingModeSourceOver

Especifica que quando uma cor é renderizada, ela é combinada com a cor do plano de fundo. A mistura é determinada pelo componente alfa da cor que está sendo renderizada.

CompositingModeSourceCopy

Especifica que quando uma cor é renderizada, ela substitui a cor do plano de fundo. Este modo não pode ser usado junto com TextRenderingHintClearTypeGridFit.

A partir da descrição deCompositingModeSourceCopy, parece que não é a opção que desejo. Das limitações que impõe, parece a opção que eu quero. E com a composição ou a transparência desativadanão é a opção que eu quero, uma vez que executa umaSourceCopy, ao invés deSourceBlend:

Felizmente, não é um mal que tenho que contemplar, porque não resolve o meu problema real. Depois de construir meugraphics objeto, tentei alterar o modo de composição:

graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1

O resultado não tem efeito na saída:

NotasNativo Win32não .NET (isto é nativo)não WinForms (isto é nativo)GDI + (isto é nativo)Veja tambémAero: Como desenhar texto ClearType em vidro?Windows Aero: De que cor pintar para fazer o "vidro" aparecer?Vista / 7: Como obter a cor do vidro?

questionAnswers(6)

yourAnswerToTheQuestion