[VC++]CToolBar按钮不能响应ON_UPDATE_COMMAND_UI?
2006-11-09 14:26
981 查看
[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) ;
}
我们需要重新派生一个新类,来实现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) ;
}
相关文章推荐
- VC 对话框程序 menu菜单响应UPDATE_COMMAND_UI 消息
- MFC对话框响应ON_UPDATE_COMMAND_UI事件
- VC++中的ON_COMMAND_RANGE宏和ON_UPDATE_COMMAND_UI_RANGE宏
- 【VC++】在对话框中使用ON_UPDATE_COMMAND_UI更新菜单
- VS2010 CDialog 不能响应 UPDATE_COMMAND_UI
- 解决对话框内工具栏对象无法响应ON_UPDATE_COMMAND_UI的问题
- VC中ON_COMMAND_RANGE 多个按钮响应一个函数
- VC下许多相同的控件事件处理方法(ON_CONTROL_RANGE、ON_COMMAND_RANGE、ON_UPDATE_COMMAND_UI_RANGE )
- VC++ 关于 ON_UPDATE_COMMAND_UI 相关的作用.
- MFC ON_UPDATE_COMMAND_UI消息不响应
- ON_COMMAND_RANGE和ON_UPDATE_COMMAND_UI_RANGE
- CProperytSheet中的ON_UPDATE_COMMAND_UI
- 关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息
- MFC对话框程序中添加工具栏及工具栏上的Button响应UPDATE_COMMAND_UI消息
- 消息响应COMMAND 和 UPDATE_COMMAND_UI的区别,使用范围的区别,使用对象的区别,等等方面的。
- 自定义消息块 ON_COMMAND_RANGE,ON_UPDATE_COMMAND_UI_RANGE
- ON_COMMAND与ON_UPDATE_COMMAND_UI
- 对话框添加 ON_UPDATE_COMMAND_UI 更新菜单和工具栏
- ON_COMMAND和ON_UPDATE_COMMAND_UI
- MFC 自定义非窗口类控件中实现 ON_COMMAND 和 ON_UPDATE_COMMAND_UI