如何在MFC中实现工具条按钮的互斥

近日在练习时遇到下面的问题,一时无法解决,知情者请答复,谢谢!
 
  练习项目:在窗口的客户区用鼠标左键点两下,以这两点为源点画椭圆或矩形。鼠标右键即时弹出菜单实现图形的选择(椭圆或矩形);工具条实现颜色的选择。
  问题:考虑到按了某工具条按钮后再按此按钮就没有意义,所以要灰化所按的按钮,同时又要启用以前灰化的按钮。如果不灰化当前所按的按钮,程序正常,但在实现互斥时出了问题。部分源代码如下:
void CDrawRectView::OnCommandRangeColor(UINT nID)
{
 // TODO: Add your command handler code here
 switch(nID)
 {
  case ID_BLACK:
   m_rgb=RGB(0,0,0);
   break;
  case ID_RED:
   m_rgb=RGB(255,0,0);
   break;
  case ID_GREEN:
   m_rgb=RGB(0,255,0);
   break;
  case ID_BLUE:
   m_rgb=RGB(0,0,255);
   break;
 }
 SetToolBarCtrlState(nID);
}

void CDrawRectView::SetToolBarCtrlState(UINT nID)

 
 int ControlBarNumber;
 //获得工具条指针
 CToolBar* pToolBar=(CToolBar*)(GetParentFrame()->GetControlBar(IDR_MAINFRAME));
 //获得工具条控制指针
 CToolBarCtrl* pToolBarCtrl=&(pToolBar->GetToolBarCtrl());
 //获得工具条控件数目
 ControlBarNumber=pToolBarCtrl->GetButtonCount();

 for(UINT ii=ID_BLACK;ii<ID_BLUE;ii++)
 { 
  TBBUTTONINFO* ptbbi;
  pToolBarCtrl->GetButtonInfo(ii,ptbbi);
  if(ptbbi->fsState!=TBSTATE_ENABLED)
  {
   pToolBarCtrl->EnableButton(nID,false);
   pToolBarCtrl->EnableButton(ii,true);
   return;
  }
 }
 return;
}

问题说明:在自定义函数SetToolBarCtrlState中调用GetButtonCount是多余的,但问题正出在他身上。注释掉GetButtonCount后,GetButtonInfo又出了问题.问题的说明都是:

Unhandled exception in DrawRect.exe (MFC42D.DLL):0xC0000005:Access Violation

编译能通过,但运行时出错。

本程序是用VC++6.0在Win XP下编译.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值