Red de conocimiento informático - Material del sitio web - Cómo hacer que los botones de la barra de herramientas sean mutuamente excluyentes en MFC

Cómo hacer que los botones de la barra de herramientas sean mutuamente excluyentes en MFC

Elemento del ejercicio: apunte con el botón izquierdo del mouse a dos puntos en el área de la ventana del cliente y dibuje una elipse o un rectángulo usando estos dos puntos como puntos de origen. El menú contextual del mouse aparece instantáneamente para realizar la selección de gráficos (elipse o rectángulo);

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.