[C con Clase] TABSTOP

Steven Davidson steven en conclase.net
Jue Jun 21 23:51:26 CEST 2007


Hola Sebastián,

El pasado 2007-06-21 14:04:42, sebastian escribió:

s> Hola, perdon por preguntar tanto, agradesco mucho ante todo. La pregunta 
s> que tengo quiza es simple, pero no se.
s> Quiero saber como hacer para que me funcione el tabstop, veo en los 
s> ejemplos que cuando agrega controles en un archivo de recurso agrega 
s> tabstop y fenomeno, pero, yo agrego un control en el evento WM_CREATE 
s> para poder tenerlo en el fichero principal, y le agrego el tabstop, pero 
s> despues toco tab y no pasa nada, hay que definir algo mas?? y otra cosa, 

Esto funciona sólo en cuadros de diálogo modales, porque este tipo de ventanas interpreta ciertas teclas y combinaciones de teclas para poder navegar en ella. Para cualesquier otras ventanas, no se implementa esta navegación. Lo que tenemos que hacer es aplicar este comportamiento a nuestra ventana. Esto se hace en el bucle 'while' de 'WinMain()', invocando la función 'IsDialogMessage()'. Esto sería,

BOOL bRet;

while( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0 )
{
  if( -1 == bRet )
  {
    // ¡Error!
  }
  else if( !IsDialogMessage(hwnd, &msg) )
  {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
  } 
}

La función 'IsDialogMessage()' ya realiza el comportamiento esperado para poder navegar correctamente y además extrae el mensaje. Técnicamente, esta función ya hace las tareas de "traducir" y "enviar", y por ello no se debe invocar estas dos funciones.

s> como creo el orden en que el tab va de un control a otro?

Para el orden, tendrás que cambiar el orden Z de los controles. Para hacer esto, usa la función 'SetWindowPos()'.


Espero que esto te ayude.

Steven


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