问下,
VC6.0 单文档程序中工具栏按钮如何禁用,
我在OnUpdate***函数中使用pCmdUI->Enable()
来实现,却发现有时候可以禁用,有时候却不能,
请问这是什么原因造成的,还有什么办法可以动态禁用
工具栏按钮?

解决方案 »

  1.   

    http://topic.csdn.net/u/20090108/14/c5c3cdf6-71df-4fc6-a68d-4249d20899eb.html
      

  2.   

    m_wndToolBar.SetButtonInfo(0,10000,TBBS_BUTTON,0);   这是把第1个按钮灰掉
    只要把ID 10000改成没有对应处理函数的就行。也可以这样
    给按妞加上这个风格 ~TBBS_PRESSED ,这样就灰色无效。在 OnUpdateCmdUI中处理UINT   dwStyle; 
    dwStyle = GetButtonStyle(0);//获得第一个按钮的style
    dwStyle   &=   ~TBBS_PRESSED;   //你可以设置灰色无效的风格   
    SetButtonStyle(0,dwStyle);//设置按钮的式样
      

  3.   

    m_wndToolBar.SetButtonInfo(0,10000,TBBS_BUTTON,0);  这是把第1个按钮灰掉 
    只要把ID 10000改成没有对应处理函数的就行。可以一试。 
      

  4.   

    经验证5楼的第一个方法可行,第二个提示GetButtonStyle未定义
      

  5.   

    SetButtonInfo只是OnCreate中有用,
    而我是想按照用户的选择来动态的改变按钮的状态,
    我就纳闷了,为什么有时可以用,而有时候就不可以禁用,
    还在谢谢各位了,还是要请高手帮一下。
    而且查了好几遍,Resource.h中也没有重复定义的条目,
    不会起冲突啊,

      

  6.   

    么出现LZ说的有时不能禁用的问题。。试下这样。。声明用于动态控制某个ToolBar按钮的变量 bool m_bFlag;添加函数afx_msg void OnUpdateTest(CCmdUI *pCmdUI);cpp里添加ON_UPDATE_COMMAND_UI(ID_TEST, &CMainFrame::OnUpdateTest)实现如下:void CMainFrame::OnUpdateTest(CCmdUI *pCmdUI)
    {
    if(m_bFlag)
    pCmdUI->Enable(TRUE); 
    else 
    pCmdUI->Enable(FALSE);
    }改变m_bFlag的true/false就可以动态控制工具栏的按钮了。。
      

  7.   

    OnUpdateCmdUI只有系统在空闲的时候才能响应,所以并不能保证能够同步。
      

  8.   

    使用m_wndToolBar.SetButtonInfo(1, 10000, TBSTYLE_BUTTON, 1);来禁用,
    需要启用时,把10000改成相应ID即可.
    这个方法是对的
      

  9.   

    经过以上的总结,m_ToolBar.SetButtonStyle(0,TBBS_DISABLED);就可以设为不可用。如果要设回来就m_ToolBar.SetButtonStyle(0,~TBBS_DISABLED);函数里面自己会按位处理,好像不需要先获取再设进去。