selección otro múltiple lista grupo formularios formulario cuadro controles combinado bloquear abrir winapi dialog controls

winapi - otro - cuadro de lista en excel



¿Cómo colorear los controles del cuadro de grupo en Win32? (2)

¿Intentó devolver hBrBackground en lugar de GetStockObject (HOLLOW_BRUSH) para WM_CTLCOLORSTATIC?

Estoy intentando hacer que el texto sea de color y fondo de un control de cuadro de grupo. Estoy usando diálogos y Win32. Para ilustrar mi problema, he creado un proyecto con el código mínimo necesario para reproducir el problema.

Si tomamos un diálogo y ponemos algún tipo de mapa de bits como fondo, podemos ver fácilmente los colores verdaderos del control de cuadro de grupo. Por defecto, sin anulación, se verá así:

Intentaré establecer el color del texto en blanco y el fondo del texto en transparente con el siguiente código:

case WM_CTLCOLORSTATIC: { HDC hDC = ( HDC )wParam; SetTextColor( hDC, RGB( 255, 255, 255 ) ); SetBkMode( hDC, TRANSPARENT ); return ( INT_PTR )GetStockObject( HOLLOW_BRUSH ); }

Probé la apariencia con y sin diseño visual habilitado al cambiar el manifiesto con:

#pragma comment(linker,"/"/manifestdependency:type=''win32'' / name=''Microsoft.Windows.Common-Controls'' version=''6.0.0.0'' / processorArchitecture=''*'' publicKeyToken=''6595b64144ccf1df'' language=''*''/"")

Con estilos visuales, el diálogo se ve así:

El fondo se cambia a un color sólido inaceptable según el fondo del diálogo. Además, el color del texto no ha podido cambiar. Con el estilo visual desactivado, el diálogo se ve así:

El color del texto ha cambiado y la transparencia ha funcionado pero el rectángulo del cuadro de grupo muestra incluso dónde está el texto.

He subido el proyecto aquí para cualquier persona interesada en probarlo.

He leído otras preguntas similares en este sitio que parecen sugerir que tal vez esto no sea posible sin la creación de subclases o el diseño del propietario. No me importa crear subclases pero estoy comprobando que no hay mejores formas de hacerlo primero. Si la única forma es la creación de subclases, me gustaría obtener información sobre lo que se debe anular (probablemente WM_PAINT). He encontrado ejemplos en línea de personas que crean sus propios controles de cuadro de grupo, pero algunos parecen sufrir problemas de orden z. Por lo tanto, con la creación de subclases, ¿sería pertinente manejar WM_NCHITTEST?

De forma similar, si alternar el estilo de dibujar propietario con SetWindowLong () y luego subclasificar el control para obtener los mensajes WM_DRAWITEM, ¿hay algo que debería tener en cuenta? ¿Cómo debo lidiar con estilos visuales, etc.?


Es una vieja pregunta, pero alguien puede buscar una respuesta. Para hacer que el fondo de un cuadro de grupo sea el mismo que el fondo de la ventana, cambie TRANSPARENT a OPAQUE en la función SetBkMode .