Estoy trabajando en una aplicación de interfaz gráfica de usuario de Win32 con API simple de Win32 (sin MFC o .NET). El problema que estoy teniendo es hacer que los controles aparezcan transparentes. Yo he llegado con un método que funciona para la mayoría de las cosas, en Windows Vista + hago esto en el WndProc:Controles transparentes de Win32 en todas las versiones de Windows
case WM_CTLCOLORSTATIC:
{
SetBkMode((HDC)wParam, TRANSPARENT);
return (INT_PTR)::GetStockObject(NULL_PEN);
}
break;
En Windows XP, hago esto en el WndProc:
case WM_CTLCOLORSTATIC:
{
HBRUSH hbr = (HBRUSH)DefWindowProc(hDlg, message, wParam, lParam);
::DeleteObject(hbr);
SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)(HBRUSH)(COLOR_WINDOW);
}
Ahora esto funciona para la mayoría de los controles, sin embargo obtengo un fondo transparente en la etiqueta en la parte superior de un control de cuadro de grupo que dibuja la línea del cuadro de grupo a través del texto. Comencé a trabajar en un caso solo para cajas de grupo, pero estoy seguro de que este es un problema que debe haberse resuelto antes y no quiero reinventar la rueda.
¿Existe un método probado para hacer que los controles parezcan transparentes?
Gracias, J
No creo que deba eliminar el pincel así ... – Anders
¿Está seguro de que el canal alfa está disponible en todas las plataformas que desee? ¿Qué pasa con las personas que tienen que usar su aplicación en una PC con Terminal Services, Remote Desktop o Windows Server?¿Qué quiere decir con "Todas las versiones de Windows"? Windows 98? ¡Eso también es Win32! Tal vez podría decir "Todas las versiones de Windows desde Windows XP y más nuevas" si eso es lo que quiere decir. –
Probablemente tenga razón al respecto, funciona ya sea que elimine el pincel o no. No recuerdo dónde obtuve ese código a partir de ahora, pero había una explicación de por qué el pincel estaba siendo eliminado así. – JWood