Pregunta

Una vez se dio cuenta de mis propias razones eran demasiado dudosa, ahora me he ido de esta manera diferente. Pero todavía estoy curioso ...

Por razones de nostalgia, la familiaridad y la pereza, estoy codificación de una interfaz de usuario con MFC. Por razones dudosas (como si los fuera poco), que quería añadir un (doble) evento de clic a un cuadro de grupo. Naturalmente, el cuadro de grupo contiene cosas -. De hecho, contiene otro elemento estático, a la que puedo añadir con éxito un (doble) clic controlador de eventos

¿Hay alguna razón no puedo conseguir un controlador de eventos para el trabajo por los clics en mi cuadro de grupo de la misma manera que puedo hacer eso para el elemento estático de texto simple? Ninguna cantidad de hacer clic en, en o cerca de los fuegos de control del evento.

Nota - He leído a través http://www.codeproject.com/ KB / estática / staticctrl_tut.aspx y trató de responder a los dos eventos _... ON_STN y mensajes ON_BN _..., seleccionar el estilo de notificar (BS_NOTIFY aparece en el archivo rc) ... y todavía me falta algo - ¿Qué es? ¿Es posible? La mayor parte de lo que he buscado en Google sugiere que es ... pero sin respuestas claras para C ++ / MFC.

Desde la primera publicación esta pregunta, he encontrado referencia a un mensaje WM_NCHITTEST y consejos que usted tiene que crear un controlador para este mensaje para anular el grupo comportamiento predeterminado cuadro de responder con HT_TRANSPARENT ... a pesar de tener su propiedad transparente en ClassWizard se pone a falso. Hmmm. Alguien puede confirmar que esto es la clave?

¿Fue útil?

Solución

Creo WM_NCHHITTEST / HT_TRANSPARENT es de hecho la clave aquí.

cajas

Grupo son una extraña clase del control: si bien parece que contienen otros controles, en realidad son hermanos de esos controles en el árbol HWND. Por lo que un cuadro de grupo que parece que contiene dos botones es en realidad un hermano de esos botones -. Y podrían venir antes o después de él en la jerarquía HWND

cajas grupo Responder a WM_NCHITTEST con HT_TRANSPARENT, de modo que los clics del ratón pasan a través de ellos. Una ventaja de esto es que no importa si el cuadro de grupo viene antes o después de los controles que parece contener en el orden ventana; los clics va a terminar siendo enrutada a esos controles, no el cuadro de grupo.

Para obtener un doble clic (o simplemente pulsando llano) en el cuadro de grupo de trabajo, que había necesidad de hacer dos cosas:

  • anular el comportamiento por defecto WM_NCHITTEST y en lugar HT_CLIENT volver, como un control periódico
  • ; en este punto que debería ser capaz de conseguir WM_LBUTTONDOWN y eventos relacionados que de otro modo habrían ido a otra parte (a un hermano, o al diálogo en sí).
  • asegurar que el contenido de la caja de grupo vienen * * antes de que en el HWND orden z, por lo que ya no están confiando en los clics que van 'a través' del cuadro de grupo. (Por lo menos creo que quisiera que fueran antes;. De cualquier manera, es posible que tenga que jugar con el ordenamiento HWND ahora que es significativa otra vez)

Tenga en cuenta que este es un tipo diferente de la transparencia de nuevo desde el WS_EX_TRANSPARENT, lo que podría ser lo que la propiedad asistente de clase Transparente se asigna a. Macroscópicamente simplifica, HT_TRANSPARENT tiene que ver con ser transparente para el ratón; WS_EX_TRANSPARENT es más acerca de ser pintadas pasado, así que los hermanos "muestran a través".

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