[VC++]CToolBar按钮不能响应ON_UPDATE_COMMAND_UI?
我们需要重新派生一个新类,来实现CToolBar响应 ON_UPDATE_COMMAND_UI,代码如下:
class
CMyToolBar :
public
CToolBar
...
{
CWnd *mpOwner ;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public:
CMyToolBar () ;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public:
//{{AFX_VIRTUAL(CMyToolBar)
//}}AFX_VIRTUAL
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
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
) ;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
protected:
//{{AFX_MSG(CMyToolBar)
//}}AFX_MSG
afx_msg void OnUpdateToolBar (CCmdUI *pCmdUI) ;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
DECLARE_MESSAGE_MAP ()
}
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
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 ()
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
CMyToolBar::CMyToolBar ()
...
{
mpOwner =NULL ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
CMyToolBar::
~
CMyToolBar ()
...
{
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
-----------------------------------------------------------------------------
BOOL CMyToolBar::Create(CWnd
*
pParentWnd, CWnd
*
pOwnerWnd, DWORD dwStyle, UINT nID)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
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) ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
-----------------------------------------------------------------------------
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
void
CMyToolBar::OnUpdateToolBar (CCmdUI
*
pCmdUI)
...
{
pCmdUI->DoUpdate (mpOwner, FALSE) ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)