Existe alguma maneira de corrigir o efeito colateral de "DwmEnableBlurBehindWindow" no VC6.0?

Eu encontrei um problema exatamente o que foi mencionado no Tópico do MSDN: DWM Blur Behind Overview .

Depois DwmEnableBlurBehindWindow foi chamado, a área do cliente tornou-se um belo vidro, mas infelizmente, todo o texto em preto nos controles (BUTTONs, EDITs, STATICs etc) tornou-se transparente também, assim como Tópico no MSDN .

Algum jeito de arrumar isso?

By the way, meu desenvolver env é VC ++ 6.0, e eu tenho que desenhar algum texto brilhante com API DrawThemeTextEx, então eu não posso usar DwmExtendFrameIntoClientArea de forma simples. Eu devo usar DwmEnableBlurBehindWindow para habilitar o efeito de vidro da região do cliente.

Muito obrigado!

2012/6/19 Atualizar: Ao alterar a cor da tecla TRANSPARENT de uma janela para uma cor não preta com "SetLayeredWindowAttributes", o uso de "DwmExtendFrameIntoClientArea" pode resolver o problema de texto de legenda de CONTROLS (BUTTONs, EDITs etc) na janela de vidro.

Mas, desta forma, "DrawThemeTextEx" não poderia funcionar corretamente. Parece que o DrawThemeTextEx só pode usar o RGB (0,0,0) como sua cor da chave TRANSPARENT.

Então, existe alguma API que poderia alterar a TRANSPARENT KEY COLOR, usada por "DrawThemeTextEx"?

Meu objetivo final é desenhar algum texto brilhante em uma janela de vidro (Aero) sem os efeitos colaterais "DwmEnableBlurBehindWindow" que foram mencionados no tópico do MSDN: DWM Blur Behind Overview, http: //msdn.microsoft.com/en-us/library /aa969537.aspx. E se há outra maneira de fazer isso, fico muito feliz em ouvir :)

E muito obrigado novamente! :)

0
adicionado editado
Visualizações: 1
A razão pela qual eu mencionei VC6 é que eu tenho que usar APIs DWM de forma dinâmica. E o MSDEV inteiro não é tão fácil de usar quanto o VS2008 ou posterior.
adicionado o autor Jimson, fonte
Sim, eu escolhi uma COR CHAVE TRANSPARENTE: RGB (200, 201, 202) para fazer todo o texto exibido corretamente nos CONTROLS. Mas, ao mesmo tempo, "DrawThemeTextEx" não funcionou corretamente. E eu estou realmente exausto ..... Meu objetivo é fazer com que "DrawThemeTextEx" e "DwmExtendFrameIntoClientArea" funcionem bem ao mesmo tempo. :(
adicionado o autor Jimson, fonte
VC6 não tem nada a ver com isso, os controles comuns usam GDI e GDI não suporta o canal alfa ...
adicionado o autor Anders, fonte
Usando uma chave de cor não é o caminho a percorrer IMHO desde que você precisa escolher uma cor que não faz parte do tema/VS e não é usado em quaisquer gráficos/ícones que você pode ter ...
adicionado o autor Anders, fonte
e se a cor do sistema de texto for RGB (200, 201, 202)?
adicionado o autor Anders, fonte

1 Respostas

Dê uma olhada em Pintura o título da legenda no MSDN:

Encontre a linha HBITMAP hbmOld = (HBITMAP) SelectObject (hdcPaint, hbm); no exemplo.

Em seguida, adicione esta linha depois:

// You should have set RGB(200,201,202) as the transparency key
FillRect(hdcPaint,&rcClient,CreateSolidBrush(RGB(200,201,202)));

Embora o efeito não pareça ser perfeito, resolve o problema.

Reference: C++ WinAPI Conflict between SetLayeredWindowAttributes and BitBlt

0
adicionado