c++ - quisiera - ¿Cómo configurar el color de fondo de la ventana después de haberla registrado?
si ella quisiera descargar (3)
Desde el fondo de la ventana viene:
... El sistema pinta el fondo de una ventana o le da la oportunidad de hacerlo enviándole un mensaje WM_ERASEBKGND cuando la aplicación llama BeginPaint. Si una aplicación no procesa el mensaje pero lo pasa a DefWindowProc, el sistema borra el fondo rellenándolo con el patrón en el pincel de fondo especificado por la clase de la ventana ...
...... Una aplicación puede procesar el mensaje WM_ERASEBKGND aunque se haya definido un pincel de fondo de clase. Esto es típico en aplicaciones que permiten al usuario cambiar el color o el patrón de fondo de la ventana para una ventana específica sin afectar a otras ventanas de la clase. En tales casos, la aplicación no debe pasar el mensaje a DefWindowProc. .....
Por lo tanto, use el wParam del mensaje WM_ERASEBKGND para obtener el DC y dibujar el fondo.
No estoy usando un cuadro de diálogo, estoy usando mi propia clase personalizada que he registrado y luego usé la llamada CreateWindow
para crearla, tengo el color de fondo predefinido en rojo al registrarme:
WNDCLASSEX wc;
wc.hbrBackground = CreateSolidBrush(RGB(255, 0, 0));
Pero ahora quiero cambiar el color de fondo en tiempo de ejecución, por ejemplo, haciendo clic en un botón para cambiarlo a azul.
He intentado usar la llamada SetBkColor()
en WM_PAINT
, y WM_CTLCOLORDLG
intentado devolver un pincel del mensaje WM_CTLCOLORDLG
, no funcionan.
¿Alguna ayuda?
Puedes probar lo siguiente:
HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG)brush);
Respuesta corta: Manejar WM_ERASEBKGND
.
Respuesta más larga:
Cuando registra el WNDCLASS, proporciona información sobre todas las ventanas de esa clase. Por lo tanto, si desea cambiar el color de solo una instancia de la ventana, deberá manejarlo usted mismo.
Cuando sea el momento de volver a pintar su ventana, el sistema le enviará a su wndproc un mensaje WM_ERASEBKGND
. Si no lo manejas, DefWindowProc
borrará el área del cliente con el color de la clase de ventana. Pero puede manejar el mensaje directamente, pintando cualquier color (o patrón de fondo) que desee.