[C con Clase] Uso del tabulador en el API de windows

Steven Davidson srd4121 en njit.edu
Lun Abr 20 19:19:52 CEST 2009


Hola Miguel,

Miguel Ángel Guerrero wrote:
> Hola, me llamo Miguel. Acabo de apuntarme a las listas de correo y no
> se todavía muy bien cómo va. La cuestión es que tengo una duda y

Ante todo, bienvenido al grupo.

> quiero ver si alguien puede ayudarme. Estoy haciendo una pequeña
> aplicación en el API de windows para aprender cómo funciona y me
> encuentro que no puedo pasar con el tabulador de un control a otro
> cuando programo los controles directamente con CreateWindowEx a pesar
> de marcar dichos controles con el estilo WS_TABSTOP. Alguien sabe por
> qué y cómo puedo solucionarlo. Gracias.
> 

Supongo que estás creando una ventana pariente que contendrá controles - 
ventanas hijas - en su interior, en el área del cliente. El problema es 
que usar TAB y SHIFT+TAB para "navegar" por los controles realmente 
forma parte del comportamiento de un cuadro de diálogo.

La solución es invocar 'IsDialogMessage()' en el bucle 'while' en 
'WinMain()'. Esto es,

int WINAPI WinMain( ... )
{
   ...
   while( GetMessage(&msg, NULL, 0, 0) != 0 )
   {
     if( !IsDialogMessage(hwnd, &msg) )
     {
       TranslateMessage( &msg );
       DispatchMessage( &msg );
      }
   }

   return (int)msg.wParam;
}

Como puedes ver, no nos interesa adentrarnos en el procedimiento de 
ventana de nuestra aplicación si el mensaje recibido hace alusión al 
comportamiento de un cuadro de diálogo.


Espero que esto te sirva.

Steven





Más información sobre la lista de distribución Cconclase