如何动态让自定义工具栏中的某个按钮变灰?

ATMCash4423 2011-08-05 02:03:09

BOOL CKhglDlg::OnInitDialog()
{
……
//初始化工具栏按钮,并且载入图标 、、
m_imagelist.Create(32,32,ILC_COLOR24|ILC_MASK,0,0);//创建M_inagelist用于存储图像
for(int x=0;x<8;x++)
{
m_imagelist.Add(theApp.LoadIcon(IDI_fuwu_baoxiu+x));//载入八个图标(之前应先在ResourecView中的String Table设置图标的值,保证图标的先后顺序)
}
//创建工具栏
m_mytoolbar.Create(TBSTYLE_FLAT | CCS_TOP | WS_CHILD | WS_VISIBLE | WS_BORDER | CCS_ADJUSTABLE,CRect(0,0,0,0),this,IDR_TOOLBAR1); //创建Toolbar Control
m_mytoolbar.SetImageList(&m_imagelist);//绑定M-imagelist图标
//设定每个按钮的状态
TBBUTTON But[8];
for(int i=0;i<8;i++)
{
But[i].dwData=0;
But[i].fsState=TBSTATE_ENABLED;
But[i].fsStyle=TBSTYLE_BUTTON;
But[i].iBitmap=i; //为每个按钮按string table设置的顺序添加到工具栏
}

But[0].idCommand=ID_fuwu_baoxiu;//设置工具栏的按钮与窗口关联
But[1].idCommand=ID_fuwu_work;
But[2].idCommand=ID_fuwu_jieling;
But[3].idCommand=ID_tongji_tongji;
But[4].idCommand=ID_tongji_geren;
But[5].idCommand=ID_tongji_chaxun;
But[6].idCommand=ID_tongji_baoxiu;
But[7].idCommand=ID_SYS_exit;

But[0].iString=m_mytoolbar.AddStrings("报修单");//设置每个按钮下面的文字内容
But[1].iString=m_mytoolbar.AddStrings("派工单");
But[2].iString=m_mytoolbar.AddStrings("维修结令");
But[3].iString=m_mytoolbar.AddStrings("统计");
But[4].iString=m_mytoolbar.AddStrings("个人统计");
But[5].iString=m_mytoolbar.AddStrings("派工单查询");
But[6].iString=m_mytoolbar.AddStrings("报修单查询");
But[7].iString=m_mytoolbar.AddStrings("退出");

m_mytoolbar.AddButtons(8,But); //设置八个工具栏按钮
m_mytoolbar.AutoSize();
m_mytoolbar.ShowWindow(SW_SHOW); //显示工具栏
……
}

我又设置了一个按钮,如果按下这个按钮,则让某个工具栏按钮变灰不可用。
m_mytoolbar.EnableButton(1,false);这样不管用。
...全文
686 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
雷中听风 2012-11-20
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
ON_UPDATE_COMMAND_UI() pCmdUI->Enable(FALSE);
说的正确,应该在ID的事件中加ON_UPDATE_COMMAND_UI(),2008有这个功能,楼主的方法不可取,手动写代码的话应该采取doctorwing的方法。
ATMCash4423 2011-08-05
  • 打赏
  • 举报
回复
晕~我自己解决了~~都删了重新添加,把TBBUTTON but作为成员变量保存好,然后……
for (int i=0;i<8;i++)
{
m_mytoolbar.DeleteButton(0);
}

But[2].fsState=0;//重新设置第三个按钮的状态,使其变灰。
But[2].fsStyle=0;
m_mytoolbar.AddButtons(8,But);
m_mytoolbar.ShowWindow(SW_SHOW);
ATMCash4423 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 doctorwing 的回复:]
引用楼主 atmcash4423 的回复:
我又设置了一个按钮,如果按下这个按钮,则让某个工具栏按钮变灰不可用。
m_mytoolbar.EnableButton(1,false);这样不管用。


定义一个全局int变量index,构造函数赋值为-1

C/C++ code

然后 if(0==++index)
{m_mytoolbar.EnableButton(1,FALS……
[/Quote]
我把这段代码放在了OnInitDialog()里,不管用啊~
ATMCash4423 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 doctorwing 的回复:]
引用 4 楼 atmcash4423 的回复:

引用 2 楼 visualeleven 的回复:
ON_UPDATE_COMMAND_UI()
pCmdUI->Enable(FALSE);

我为IDR_TOOLBAR1添加了ON_UPDATE_COMMAND_UI()消息
C/C++ code

void COprHistDlg::OnUpdateIdrToolbar1(CC……
[/Quote]
我这是自定义的工具栏,请大家看看我上面贴的代码再回答啊。
我添加了ON_UPDATE_COMMAND_UI()消息,并且下了断点……程序压根就不往这个消息里进……
我才是心翼 2011-08-05
  • 打赏
  • 举报
回复
ID_XXXX是你定义的菜单项或者按钮的ID
2 是...的索引
shiyunqiang 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 doctorwing 的回复:]

引用 2 楼 visualeleven 的回复:

ON_UPDATE_COMMAND_UI()
pCmdUI->Enable(FALSE);

老大,这个貌似是菜单栏的消息映射机制吧?他问的自定义工具栏能解决吗?
[/Quote]

工具栏中的ID一般要对应着菜单栏的ID的所以禁用了菜单栏中的ID,工具栏中与之对应的ID也可以禁用。
我才是心翼 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 atmcash4423 的回复:]

引用 2 楼 visualeleven 的回复:
ON_UPDATE_COMMAND_UI()
pCmdUI->Enable(FALSE);

我为IDR_TOOLBAR1添加了ON_UPDATE_COMMAND_UI()消息
C/C++ code

void COprHistDlg::OnUpdateIdrToolbar1(CCmdUI *pCmdUI)
{
// TODO……
[/Quote]

你应该这样的
if(ID_XXXX==pCmdUI->m_nID)  
{pCmdUI->Enable(FALSE)}


或者

if(2==pCmdUI->m_nIndex)
{pCmdUI->Enable(FALSE)}
我才是心翼 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 atmcash4423 的回复:]
我又设置了一个按钮,如果按下这个按钮,则让某个工具栏按钮变灰不可用。
m_mytoolbar.EnableButton(1,false);这样不管用。
[/Quote]

定义一个全局int变量index,构造函数赋值为-1
然后 if(0==++index)
{m_mytoolbar.EnableButton(1,FALSE);}
else {...}

试试~
ATMCash4423 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
ON_UPDATE_COMMAND_UI()
pCmdUI->Enable(FALSE);
[/Quote]
我为IDR_TOOLBAR1添加了ON_UPDATE_COMMAND_UI()消息

void COprHistDlg::OnUpdateIdrToolbar1(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->Enable(FALSE);
}

不管用,而且我想只禁用一部分按钮。
我才是心翼 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]

ON_UPDATE_COMMAND_UI()
pCmdUI->Enable(FALSE);
[/Quote]
老大,这个貌似是菜单栏的消息映射机制吧?他问的自定义工具栏能解决吗?
Eleven 2011-08-05
  • 打赏
  • 举报
回复
ON_UPDATE_COMMAND_UI()
pCmdUI->Enable(FALSE);
ATMCash4423 2011-08-05
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶上

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧