El comportamiento que describes, donde la tecla Tab no mueve el foco entre los controles `CEdit` y `CButton` en una ventana derivada de `CMDIChildWnd`, es un problema común en aplicaciones MFC. Esto puede deberse a que el manejo del foco de tabulación no se está propagando correctamente a través de la jerarquía de controles.
Aquí hay algunas soluciones y recomendaciones que puedes probar:
1. Asegúrate de que los estilos son correctos
Asegúrate de que todos los controles que deseas que respondan a la tecla Tab tienen el estilo `WS_TABSTOP`. Esto incluye tanto los controles `CEdit` como `CButton`. Además, asegúrate de que la ventana principal y la ventana hija están configuradas correctamente.
2. Manejo del ensaje `WM_GETDLGCODE`
Puedes sobrescribir el método `PreTranslateMessage` en tu clase derivada de `CMDIChildWnd` para asegurarte de que el mensaje de tabulación se maneje correctamente. Aquí hay un ejemplo de cómo hacerlo:
3. Uso de `GetNextDlgTabItem`
El método `GetNextDlgTabItem` se utiliza para obtener el siguiente control en el orden de tabulación. Asegúrate de que todos los controles están en el mismo padre (por ejemplo, el mismo `CDialog` o `CWnd`) para que esto funcione correctamente.
4. Verifica el orden de tabulación
Asegúrate de que el orden de tabulación de los controles es el correcto. Puedes establecer el orden de tabulación en el recurso de diálogo o programáticamente utilizando `SetWindowPos` para asegurarte de que los controles están en el orden deseado.
5. Asegúrate de que el control tiene el foco inicialmente
Si el control `CEdit` o `CButton` no tiene el foco al inicio, asegúrate de establecer el foco en el control deseado en el método `OnInitDialog` o en el constructor de tu ventana hija.
6. Verifica el estilo de la ventana
Asegúrate de que la ventana hija tiene el estilo `WS_VISIBLE` y que no hay otros estilos que puedan interferir con el manejo del foco.
Conclusión
Siguiendo estos pasos, deberías poder resolver el problema de la tecla Tab en tus controles `CEdit` y `CButton` dentro de una ventana derivada de `CMDIChildWnd`. Si el problema persiste, verifica si hay otros manejadores de mensajes que puedan estar interfiriendo con el comportamiento esperado.
¡Buena suerte, Fernando!