CMFCToolBar上按钮的状态更新
来源:互联网 发布:查询 域名 最早 注册人 编辑:程序博客网 时间:2024/05/30 12:29
1。实现ON_UPDATE_COMMAND_UI宏以及相关的函数
BEGIN_MESSAGE_MAP(CXXXX, CWnd)
ON_UPDATE_COMMAND_UI(id, OnFun)
END_MESSAGE_MAP()
BOOL bEnable = FALSE;
void CXXXX::OnFun(CCmdUI *pCmdUI)
{
pCmdUI->Enable(bEnable);
}
2. 直接修改ToolBar按钮的风格
如果方法1不能自动实现,比如在OCX控件中,则可以用直接修改按钮风格的方法来实现,具体如下:
void CXXXX::EnableToolBarItem(int iIndex, BOOL bOn)
{
CMainFrame *pMainFrame = (CMainFrame *)theApp.GetMainWnd();
ENSURE(pMainFrame!= NULL)
CMFCToolBar* pToolBar = &pMainFrame->m_wndToolBar;//wndToolBar是我们的CMFCToolBar对象
ENSURE(pToolBar != NULL);
ASSERT_KINDOF(CMFCToolBar, pToolBar);
ASSERT(iIndex < pToolBar->GetCount());
UINT nNewStyle = pToolBar->GetButtonStyle(iIndex) & ~TBBS_DISABLED;
if (!bOn)
{
nNewStyle |= TBBS_DISABLED;
}
ASSERT(!(nNewStyle & TBBS_SEPARATOR));
pToolBar->SetButtonStyle(iIndex, nNewStyle);
}
改变Check状态类似,具体不再赘述。
请参见afxtoolbar.cpp中CToolCmdUI类的源代码,代码如下:
void CToolCmdUI::Enable(BOOL bOn)
{
m_bEnableChanged = TRUE;
CMFCToolBar* pToolBar = (CMFCToolBar*)m_pOther;
ENSURE(pToolBar != NULL);
ASSERT_KINDOF(CMFCToolBar, pToolBar);
ASSERT(m_nIndex < m_nIndexMax);
UINT nNewStyle = pToolBar->GetButtonStyle(m_nIndex) & ~TBBS_DISABLED;
if (!bOn)
nNewStyle |= TBBS_DISABLED;
ASSERT(!(nNewStyle & TBBS_SEPARATOR));
pToolBar->SetButtonStyle(m_nIndex, nNewStyle);
}
void CToolCmdUI::SetCheck(int nCheck)
{
ASSERT(nCheck >= 0);
if (nCheck > 2)
{
nCheck = 1;
}
CMFCToolBar* pToolBar = (CMFCToolBar*)m_pOther;
ENSURE(pToolBar != NULL);
ASSERT_KINDOF(CMFCToolBar, pToolBar);
ASSERT(m_nIndex < m_nIndexMax);
UINT nNewStyle = pToolBar->GetButtonStyle(m_nIndex) & ~(TBBS_CHECKED | TBBS_INDETERMINATE);
if (nCheck == 1)
nNewStyle |= TBBS_CHECKED;
else if (nCheck == 2)
nNewStyle |= TBBS_INDETERMINATE;
ASSERT(!(nNewStyle & TBBS_SEPARATOR));
pToolBar->SetButtonStyle(m_nIndex, nNewStyle | TBBS_CHECKBOX);
}
void CToolCmdUI::SetRadio(BOOL bOn)
{
SetCheck(bOn ? 1 : 0); // this default works for most things as well
CMFCToolBar* pToolBar = (CMFCToolBar*)m_pOther;
ENSURE(pToolBar != NULL);
ASSERT_KINDOF(CMFCToolBar, pToolBar);
ASSERT(m_nIndex < m_nIndexMax);
CMFCToolBarButton* pButton = pToolBar->GetButton(m_nIndex);
ASSERT_VALID(pButton);
pButton->SetRadio();
}
- CMFCToolBar上按钮的状态更新
- CMFCToolBar去掉关闭按钮的方法
- VS2010 CMFCToolBar名称更新
- 对话框上创建CMFCToolBar
- CMFCToolBar的简单使用
- CMFCToolBar的注意事项
- CMFCToolBar工具条添加下拉菜单按钮
- 动态创建CMFCToolbar并添加按钮
- MFC设置按钮状态和在按钮上加载位图的方法
- 按钮的可用状态
- 网站上的QQ在线客服“QQ在线状态”按钮变成灰色“未启用”状态?
- VS2010中CMFCToolBar的用法
- VC6.0中基于对话框程序中菜单栏和工具条按钮的状态同步更新问题
- 多按钮的状态显示
- button按钮的点击状态
- 切换同一个按钮的状态
- Android按钮状态的切换
- 按钮上的超链接
- 内核中基于netfilter的编译选项
- MFC串口编程
- SkipList跳表的原理与实现
- 网络编程 socket
- WebInspect
- CMFCToolBar上按钮的状态更新
- Codeforces Round #121 (Div. 1) / 191A Dynasty Puzzles (dp&优化)
- 关于编程,大学没有传授的十件事
- linux 好的博客 地址 设备驱动程序
- multinomial logit model 多项 Logit 模型
- junit涉及到的注解,及其用途
- JDBC的使用——Statement
- Objective-C method "isMemberOfClass"
- 用MyXls生成Excel报表(C#)