¿Hay alguna manera de corregir el efecto secundario de "DwmEnableBlurBehindWindow" en VC6.0?

He encontrado un problema exactamente mencionado en el tema de MSDN: Descripción general de DWM Blur Behind .

Después de llamar a DwmEnableBlurBehindWindow, el área del cliente se convirtió en un hermoso cristal, pero desafortunadamente, todo el texto negro en los controles (BUTTON, EDIT, STATIC, etc.) también se volvió transparente, al igual que Tema en MSDN .

Cualquier forma de arreglar esto?

Por cierto, My develop env es VC ++ 6.0, y tengo que dibujar un texto brillante con la API DrawThemeTextEx, por lo que no puedo usar DwmExtendFrameIntoClientArea de manera simple. DEBO usar DwmEnableBlurBehindWindow para habilitar el efecto de cristal de la región del cliente.

¡Muchas gracias!

2012/6/19 Actualizar: Al cambiar el COLOR DE CLAVE TRANSPARENTE de una ventana a un color que no sea negro con "SetLayeredWindowAttributes", el uso de "DwmExtendFrameIntoClientArea" puede resolver el problema de texto de leyenda de CONTROLES (BOTONES, EDITAR, etc.) en la ventana de cristal.

Pero de esta manera, "DrawThemeTextEx" no podría funcionar correctamente. Parece que DrawThemeTextEx solo podría usar el RGB (0,0,0) como COLOR DE CLAVE TRANSPARENTE.

Entonces, ¿hay alguna API que pueda cambiar el COLOR DE CLAVE TRANSPARENTE utilizado por "DrawThemeTextEx" dentro de?

Mi objetivo final es dibujar texto brillante en una ventana de cristal (Aero) sin los efectos secundarios "DwmEnableBlurBehindWindow" que se mencionan en el tema de MSDN: Descripción general de DWM Blur Behind, http: //msdn.microsoft.com/en-us/library /aa969537.aspx. Y si hay otra manera de hacerlo, estoy muy contento de escuchar :)

Y muchas gracias, de nuevo! :)

0
La razón por la que mencioné el VC6 es porque tengo que usar las API de DWM de una manera dinámica. Y todo el MSDEV no es tan fácil de usar como VS2008 o posterior.
agregado el autor Jimson, fuente
Sí, he elegido un COLOR DE CLAVE TRANSPARENTE: RGB (200, 201, 202) para hacer que todo el texto se muestre correctamente en los CONTROLES. Pero al mismo tiempo, "DrawThemeTextEx" no podría funcionar correctamente. Y estoy realmente agotado ... Mi objetivo es hacer que "DrawThemeTextEx" y "DwmExtendFrameIntoClientArea" funcionen bien al mismo tiempo. :(
agregado el autor Jimson, fuente
VC6 no tiene nada que ver con eso, los controles comunes usan GDI y GDI no es compatible con el canal alfa ...
agregado el autor Anders, fuente
Usar una clave de color no es la manera de ir en mi humilde opinión, ya que necesita elegir un color que no sea parte del tema/VS y no se use en ningún gráfico/ícono que pueda tener ...
agregado el autor Anders, fuente
y si el color del sistema de texto es RGB (200, 201, 202)?
agregado el autor Anders, fuente

1 Respuestas

Eche un vistazo a Painting el título del título en MSDN:

Busque la línea HBITMAP hbmOld = (HBITMAP) SelectObject (hdcPaint, hbm); en el ejemplo.

Luego, agregue esta línea después de ella:

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

Aunque el efecto no parece ser perfecto, resuelve el problema.

Reference: C++ WinAPI Conflict between SetLayeredWindowAttributes and BitBlt

0
agregado