Aquí podría ser tu PUBLICIDAD


¿Cómo se desactiva CBitmapButton?

votos
2

¿Cómo se desactiva CBitmapButton? Intenté usar m_bitmapbutton.EnableWindow (false); pero no funciona. Todavía dispara un evento.

Lo que trato de hacer es evitar que el Botón A active el Evento A si el Evento B se está ejecutando (desde el Botón B). Entonces, en el Evento B, quiero deshabilitar el Botón A.

Publicado el 12/03/2009 a las 18:57
fuente por usuario sal
En otros idiomas...        العربية       

2 respuestas

votos
1

Aquí hay una lista de cosas para verificar:

  • ¿Definió una imagen para el estado deshabilitado del botón de mapa de bits?
  • ¿Estás seguro de que el evento se disparó?
  • El evento B no está en un hilo ¿verdad?
  • ¿Estás haciendo un m_bitmapbutton.EnableWindow (FALSE) al comienzo del Evento B y m_bitmapbutton.EnableWindow (TRUE) al final?
  • ¿Estás haciendo una notificación BN_CLICKED ()? ¿O es tal vez una notificación diferente como WM_LBUTTONDOWN Notification ()?
  • ¿Estás seguro de que la variable m_bitmapbutton está asociada correctamente con tu botón A? Podría intentar con GetDlgItem (IDC_BUTTON_A) -> EnableWindow (FALSE);

Siempre puede establecer una variable de miembro booleana para indicar que el Botón A está desactivado e ignorar los eventos que se le envían cuando se establece este miembro booleano.

Puede ser más fácil usar esta clase de CodeProject .

Respondida el 12/03/2009 a las 07:03
fuente por usuario Brian R. Bondy


Aquí podría ser tu PUBLICIDAD


votos
0

Supongo que el problema es que mientras asiste al Evento B, los mensajes para esta ventana no se envían. Entonces están en cola y se dispararon después de que termines de asistir al Evento B y has habilitado el botón A otra vez. Algo como eso:

  1. OnBnClickedButtonB
  2. buttonA.EnableWindow (FALSE) (los eventos del mouse para la ventana están en cola y no enviados)
  3. buttonA.EnableWindow (TRUE)
  4. ~ OnBnClickedButtonB (la aplicación distribuye los eventos en cola para que el botón vuelva a habilitarse)

Esto no es solo un problema con CBitmapButton ... debería pasar con cualquier otro botón (no lo he probado).

Una posible solución podría ser enviar eventos del mouse para esta ventana antes de volver a habilitar el botón ... aunque no me gustó demasiado, haga este tipo de cosas ... quizás alguien pueda darle una mejor solución:

void CMyDlg::OnBnClickedButtonB()
{
    m_buttonA.EnableWindow(FALSE);

    //Process button B clicked event 

    MSG msg;
    while(PeekMessage(  &msg, 
                GetSafeHwnd(), 
                WM_MOUSEFIRST, 
                WM_MOUSELAST, 
                PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);  
    }

    m_buttonA.EnableWindow(TRUE);
}

¡Espero que esto ayude!

Javier

Respondida el 13/03/2009 a las 10:08
fuente por usuario Javier De Pedro