Comportamiento extraño del color de fondo del control de edición al usar controles comunes de WinXp

StackOverflow https://stackoverflow.com/questions/1621077

Pregunta

Tengo un problema extraño (bueno, al menos lo encuentro extraño =)). Estoy escribiendo mi propia biblioteca de GUI, que es una envoltura alrededor de la API de Windows (y sí, estoy al tanto de WTL y marcos como MFC =)). En la etapa actual, he incapsulado los controles comunes de tal manera: por ejemplo, Editar clase consta de una ventana simple y una ventana de edición estándar sobre ella (MainWindow - > GhostWindow - > EditBox). Así es como puedo, por ejemplo, cambiar el color de fondo de una edición dentro de una clase de edición:

myedit->SetBkColor ( RGB ( 0, 0, 0 ) );

Y funcionó bien, hasta que llamé InitCommonControlsEx y adjunté el archivo de manifiesto a mi programa. Después de hacer esto, mis ediciones se vuelven capaces de cambiar de color solo cuando están enfocadas. Para ser honesto, no tengo una idea completa de por qué me comporto así y qué hago mal, así que agradeceré cualquier ayuda.

Gracias, # 535.

¿Fue útil?

Solución 2

Bueno, todo es mucho más fácil, de lo que pensaba. Estaba demasiado desatento = (cuando uno no usa el estilo, un bastón usa :: SetBkColor (...) para cambiar el color de fondo y devuelve un pincel de WM_CTLCOLOR * para cambiar el color de un borde. Las cosas se vuelven diferentes después de habilitar el estilo . Ahora: SetBkColor (...) corresponde al color focus y el pincel que regresa cambia el color de fondo. Shame on me = (

Otros consejos

  1. Cuando adjunta el manifiesto de la versión 6, la llamada a InitcommonControlsEx se vuelve innecesaria.

  2. De todos modos. con los controles comunes de la versión 6 cargados, la temática XP se usa incluso para los controles estándar de Windows. Los colores de fondo de los controles se pintan utilizando el color del tema xp, por lo que los mensajes WM_CTLCOLOR * se usan menos.

  3. ¿Actualmente estás anulando el coolor de varios elementos de control usando los mensajes WM_CTLCOLOR *?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top