Cómo hacer que los botones de la barra de herramientas sean mutuamente excluyentes en MFC
Problema: Considerando que presionar un botón de la barra de herramientas y luego presionarlo nuevamente no tiene sentido, el botón presionado debe estar atenuado mientras el botón previamente atenuado esté habilitado. El programa funcionará bien sin atenuar el botón actualmente presionado, pero surgirán problemas al implementar la exclusión mutua.
Parte del código fuente es el siguiente:
void CDrawRectView::OnCommandRangeColor(UINT nID)
{
// TODO: agregue aquí el código del controlador de comandos
cambiar(nID )
{
caso ID_BLACK:
m_rgb=RGB(0, 0, 0
ruptura;
caso ID_RED:
m_rgb=RGB(255, 0, 0);
ruptura
; caso ID_GREEN:
m_rgb=RGB(0, 255, 0);
descanso
caso ID_BLUE:
m_rgb=RGB; (0, 0, 255);
descanso
}
SetToolBarCtrlState(nID); p>void CDrawRectView::SetToolBarCtrlState(UINT nID)
{
int ControlBarNumber;
//Obtener el puntero de la barra de herramientas
CToolBar * pToolBar=(CToolBar*)(GetParentFrame()-gt;GetControlBar(IDR_MAINFRAME));
//obtener el puntero de control de la barra de herramientas
CToolBarCtrl* pToolBarCtrl=amp;(pToolBar-gt ;GetToolBarCtrl());
//Obtener el número de controles de la barra de herramientas
ControlBarNumber=pToolBarCtrl-gt.GetButtonCount();
for(UINT ii= ID_BLACK; ID_BLUE; ii )
{
TBBUTTONINFO* ptbbi
pToolBarCtrl-gt. p> if(ptbbi-gt;fsState! =TBSTATE_ENABLED)
{
pToolBarCtrl-gt; EnableButton(nID, falso);
pToolBarCtrl-gt; >
return;
}
}
return;
}
Descripción del problema: En Llamar a GetButton en la función personalizada SetToolBarCtrlState Llamar a GetButtonCount en la función personalizada SetToolBarCtrlState es redundante, pero ese es exactamente el problema. Después de comentar GetButtonCount, GetButtonInfo tuvo otro problema.
La descripción del problema es la siguiente:
Se produjo una excepción no controlada en DrawRect.exe (MFC42D.DLL): 0xC0000005: infracción de acceso
La compilación pasó, pero se produjo un error durante el tiempo de ejecución.
Este programa fue compilado usando VC 6.0 bajo Win XP.