[VC++]CToolBar按钮不能响应ON_UPDATE_COMMAND_UI?
我们需要重新派生一个新类,来实现CToolBar响应 ON_UPDATE_COMMAND_UI,代码如下:

class CMyToolBar : public CToolBar ...{
CWnd *mpOwner ;

public:
CMyToolBar () ;

public:
//{{AFX_VIRTUAL(CMyToolBar)
//}}AFX_VIRTUAL

public:
virtual ~CMyToolBar () ;
BOOL Create (CWnd *pParentWnd, CWnd *pOwnerWnd =NULL,
DWORD dwStyle =WS_CHILD | WS_VISIBLE | CBRS_SIZE_DYNAMIC | CBRS_FLYBY | CBRS_TOP | CBRS_TOOLTIPS | TBSTYLE_FLAT,
UINT nID =AFX_IDW_TOOLBAR
) ;

protected:
//{{AFX_MSG(CMyToolBar)
//}}AFX_MSG
afx_msg void OnUpdateToolBar (CCmdUI *pCmdUI) ;

DECLARE_MESSAGE_MAP ()
} ;


BEGIN_MESSAGE_MAP (CMyToolBar, CToolBar)
//{{AFX_MSG_MAP(CMyToolBar)
//}}AFX_MSG_MAP
ON_UPDATE_COMMAND_UI_RANGE (0x0000, 0xffff, OnUpdateToolBar) // See TN031
END_MESSAGE_MAP ()


CMyToolBar::CMyToolBar () ...{
mpOwner =NULL ;
}


CMyToolBar::~CMyToolBar () ...{
}

//-----------------------------------------------------------------------------
BOOL CMyToolBar::Create(CWnd *pParentWnd, CWnd *pOwnerWnd, DWORD dwStyle, UINT nID)

...{

if ( CToolBar::Create (pParentWnd, dwStyle, nID) ) ...{
mpOwner =(pOwnerWnd == NULL ? pParentWnd : pOwnerWnd) ;
ASSERT ( mpOwner->GetSafeHwnd () != NULL ) ;
ASSERT_KINDOF (CWnd, mpOwner);
GetToolBarCtrl ().SetOwner (mpOwner) ;
return (TRUE) ;
}
return (FALSE) ;
}

//-----------------------------------------------------------------------------

void CMyToolBar::OnUpdateToolBar (CCmdUI *pCmdUI) ...{
pCmdUI->DoUpdate (mpOwner, FALSE) ;
}

