[C con Clase] Ejecutar accion de un control

Steven Davidson steven en conclase.net
Mar Feb 13 23:13:52 CET 2007


Hola Alan,

El pasado 2007-02-13 20:50:03, alan escribió:
 
a> Hola espero puedan ayudarme.
a> Digamos que tengo 2 botones boton1 y boton2 como puedo hacer para que cuando haga click en el boton1 aparte de ejecutar sus acciones tambien se ejecuten las acciones del boton2 sin necesidad de hacer click en el boton2, para de esta manera no tener que repetir todo el codigo del boton2 en el codigo del boton1.

Supongo que lo más sencillo es usar una variable booleana para que se ejcuten las sentencias comunes a ambas tareas. Si no, entonces puedes agrupar las sentencias en una función e invocarla tanto para realizar las acciones de un botón como las del otro. Por ejemplo,

case WM_COMMAND:
  if( HIWORD(wParam) == BN_CLICKED )
  {
    // Para hacer las acciones del botón #2
    bool bAccionesBoton2 = false;
    if( LOWORD(wParam) == IDC_BOTON1 )
    {
      // Acciones de botón #1
      ...
      bAccionesBoton2 = true;
    }

    if( LOWORD(wParam) == IDC_BOTON2 || bAccionesBoton2 )
    {
      // Acciones de botón #2
      ...
    }
   }
return 0;

Otra solución es comprobar dos veces 

if( LOWORD(wParam) == IDC_BOTON1 )
{
  // Acciones de botón #1
  ...
}

if( LOWORD(wParam) == IDC_BOTON2 || LOWORD(wParam) == IDC_BOTON1 )
{
  // Acciones de botón #2 y posiblemente la parte restante de botón #1
  ...
}


También podrías haber usado funciones. Por ejemplo,

void AccionesBoton2();

if( HIWORD(wParam) == BN_CLICKED )
{
  if( LOWORD(wParam) == IDC_BOTON1 )
  {
    // Acciones de botón #1
    ...
    // Para hacer las acciones del botón #2
    AccionesBoton2();
  }
  else if( LOWORD(wParam) == IDC_BOTON2 )
  {
    // Acciones de botón #2
    AccionesBoton2();
  }
}

Observa que para el caso de usar funciones, podemos describir un comportamiento de 'if/else', mientras que en los otros casos, debemos comprobar ambas condiciones, ya que la segunda es compleja.


Espero que esto te sirva.

Steven


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