我看了工具栏按钮的fsState属性,里面有:
    TBSTATE_CHECKED 
The button has the TBSTYLE_CHECK style and is being clicked.TBSTATE_ELLIPSES 
Version 4.70. The button's text is cut off and an ellipsis is displayed.TBSTATE_ENABLED 
The button accepts user input. A button that doesn't have this state is grayed.TBSTATE_HIDDEN 
The button is not visible and cannot receive user input.TBSTATE_INDETERMINATE 
The button is grayed.TBSTATE_MARKED 
Version 4.71. The button is ed. The interpretation of a ed item is dependent upon the application. TBSTATE_PRESSED 
The button is being clicked.TBSTATE_WRAP 
The button is followed by a line break. The button must also have the TBSTATE_ENABLED state.但就是没有disable。我用过里面的变灰,没用,只是让按钮灰化但是还是能点击。请高手指点。

解决方案 »

  1.   

    m_wndToolBar.GetToolBarCtrl().EnableButton(ID_BUTTON_XX, FALSE);
      

  2.   

    不行啊,我用的是ATL,没有用到MFC,所以楼上的方法是行不通的。继续请教
      

  3.   

    hWndToolBar 为工具条窗口句柄,ID_BUTTONX 为按钮ID
    SendMessage(
    hWndToolBar, 
    (UINT) TB_ENABLEBUTTON,  
    (WPARAM)ID_BUTTONX, 
    (LPARAM)MAKELPARAM(FALSE, 0)
    );
      

  4.   

    楼上的办法很好,非常感谢。但是,我在IE中将几个按钮给disable后,这几个按钮仅仅是暂时disable了一下,一会儿又变成了enable了。请问这是什么原因呢?该怎么处理?
      

  5.   

    那是应该IE按钮的状态是由IE窗口维护,不停的更新,所以你修改之后又被改回来了。
    需要Hook IE窗口的窗口过程,来替换IE对其维护的代码,你看一下Hook的相关资料。
      

  6.   

    楼上所言极是,思危同学经验很丰富啊。能有机会认识一下就好了:)我发现IE的标准工具栏是很特殊的,我用spy++观察,IE中的菜单栏,工具栏和其它的一些toolbar都属于工具栏窗口。我把这些窗口中的所有的项目统统disalbe掉后,除了IE标准工具栏以外,其余的toolbar包括菜单都很完美的disable了。我个人认为,与其让IE标准工具栏中的按钮disable,不如把它们给隐藏起来,简便省力效果也不错。