[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) ;
}
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) ;
}