He creado una casilla de verificación transparente en Win32 C++. Lo hice porque, por lo que sé, no puedes tener una casilla de verificación transparente en win32 nativo y necesito usar esta casilla de verificación en un instalador de NSIS.Cómo "borrar" una ventana transparente de WinAPI
Mi problema: Al repintar, no sé cómo borrar mi fondo transparente para poder dibujar sobre un "lienzo claro". Esto es importante cuando el usuario cambia el texto dentro de la casilla de verificación y necesito volver a pintarlo. Supongo que me he encontrado con el problema que todos deben tener con ventanas transparentes.
De qué manera puedo borrar mi ventana transparente, Nota Estoy familiarizado con WinAPI que realmente no puede borrar una ventana AFAIK porque simplemente vuelve a pintar sobre la ventana. Así que estoy buscando consejo sobre qué técnicas puedo utilizar para volver a dibujar la ventana, tales como:
- Enviar un mensaje repinte a la ventana primaria que se espera que vuelva a pintar el padre (que es la sentada debajo de la casilla de verificación) withut enviar un mensaje a sus hijos (es decir, la casilla de verificación). He intentado esto, hace que la casilla de verificación tenga mucho parpadeo.
- Tal vez hay una función de pincel/pintura transparente que no sé sobre la que podría utilizar para pintar sobre toda la ventana de la casilla de verificación que esencialmente borrará la ventana? He intentado esto, ¿hace que la ventana de casilla de verificación sea negra por algún motivo?
Mi código:
case WM_SET_TEXT:
{
// set checkbox text
// Technique 1: update parent window to clear this window
RECT thisRect = {thisX, thisY, thisW, thisH};
InvalidateRect(parentHwnd, &thisRect, TRUE);
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// Technique 2:
SetBkMode(hdc, TRANSPARENT);
Rectangle(hdc, thisX, thisY, thisW, thisH); // doesn't work just makes the window a big black rectangle?
EndPaint(hwnd, &ps);
}
break;
En general no quiero volver a enviar un mensaje de dibujo a otra ventana, si lo desea repintado, invalida es rectángulo. –
¿Qué haces en tu controlador de mensajes WM_ERASEBKGND? –
@LarryOsterman hmm ¿nunca antes funcionó con ese mensaje? Entonces nada en este momento, ¿qué debería hacer? –