c++ - por - habilitar y deshabilitar botones en c#
Deshabilitar/habilitar botones de cinta para el paquete de características MFC (2)
Estoy usando el paquete de características de MFC y tengo algunos botones en una barra de cinta, instancias de CMFCRibbonButton. El problema es que me gustaría habilitar y deshabilitar algunos de ellos en ciertas condiciones, pero en tiempo de ejecución. ¿Cómo puedo hacer esto? porque no hay un método específico para esto ... Escuché que una solución sería unir / separar los controladores de eventos en tiempo de ejecución, pero no sé cómo ...
ChrisN dio una respuesta bastante perfecta. Puede ver un ejemplo de cómo se hace exactamente descargando el paquete de ejemplo VS2008 desde aquí y abriendo la solución MSOffice2007Demo.
Al ejecutar la muestra, observe la casilla de verificación "Miniaturas" en la pestaña Vista de la cinta de opciones, está deshabilitada.
Esto está controlado por CMSOffice2007DemoView::OnUpdateViewThumb
que llama a pCmdUI->Enable(FALSE);
. Puede cambiar esto para llamar a TRUE
o FALSE
en tiempo de ejecución para habilitar / deshabilitar el botón respectivamente.
Cuando crea el objeto CMFCRibbonButton
, debe especificar el ID de comando asociado (consulte la documentación del constructor CMFCRibbonButton
aquí ). La habilitación y deshabilitación de los botones de cinta se realiza utilizando el mecanismo de actualización de comandos habitual en MFC, utilizando la clase CCmdUI
.
Por ejemplo, si tiene un botón de cinta cuyo ID de comando es ID_MYCOMMAND
y desea manejar este comando en la clase de vista de su aplicación, debe agregar estas funciones a la clase:
// MyView.h
class CMyView : public CView {
// ...
private:
afx_msg void OnMyCommand();
afx_msg void OnUpdateMyCommand(CCmdUI* pCmdUI);
DECLARE_MESSAGE_MAP()
};
e implementarlos en el archivo .cpp:
// MyView.cpp
void CMyView::OnMyCommand() {
// add command handler code.
}
void CMyView::OnUpdateMyCommand(CCmdUI* pCmdUI) {
BOOL enable = ...; // set flag to enable or disable the command.
pCmdUI->Enable(enable);
}
También debe agregar las entradas ON_COMMAND
y ON_UPDATE_COMMAND_UI
al mapa de mensajes para la clase CMyView
:
// MyView.cpp
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_MYCOMMAND, &CMyView::OnMyCommand)
ON_UPDATE_COMMAND_UI(ID_MYCOMMAND, &CMyView::OnUpdateMyCommand)
END_MESSAGE_MAP()
Para obtener más información sobre mapas de mensajes en MFC, consulte TN006: Mapas de mensajes en MSDN.
¡Espero que esto ayude!