细谈SetButtonInfo函数及其用途

SetButtonInfo用于设置某个按钮,它的接口定义如下:

下面是它的几个接口函数说明:

void CToolBar::SetButtonInfo(int nIndex, UINT nID, UINT nStyle, int iImage)

注意CToolBarCtrl类也有这个函数,但是它们的定义是完全不同的,实际上,CToolBar::SetButtonInfo的代码如下:

void CToolBar::SetButtonInfo(int nIndex, UINT nID, UINT nStyle, int iImage)

{

ASSERT_VALID(this);

TBBUTTON button;

_GetButton(nIndex, &button);

TBBUTTON save;

memcpy(&save, &button, sizeof(save));

button.idCommand = nID;

button.iBitmap = iImage;

button.fsStyle = (BYTE)LOWORD(nStyle);

button.fsState = (BYTE)HIWORD(nStyle);

if (memcmp(&save, &button, sizeof(save)) != 0)

{

_SetButton(nIndex, &button);

m_bDelayedButtonLayout = TRUE;

}

}

msdn介绍说这个函数的功能是设置工具条按钮的 ID, style, 以及图片的编号。因此,通常这个函数有三个方面的用途:

(1)用于在工具条中添加其他控件

需要注意的是,当给出的nStyle是TBBS_SEPARATOR的时候,iImage是指它的宽度,而不是图片的编号。这个功能在向工具条中添加其它控件(比如编辑控件、组合框控件)的时候非常有用,它可以改变按钮的位置,为添加的控件留出空间。这个在后面将谈到。

(2)用于改变工具条中按钮的样式

例如:

m_wndToolBar.SetButtonInfo(i, ID_FILE_SAVE, TBBS_CHECKBOX, 2);

该代码将工具条按钮ID_FILE_SAVE设置成CHECKBOX按钮,即单击该按钮显示按下,再次单击显示抬起。

例如:

int i = m_wndToolBar.CommandToIndex( ID_BUTTON1);

m_wndToolBar.SetButtonInfo(i, ID_BUTTON1, TBBS_GROUP|TBBS_CHECKBOX , 9);

m_wndToolBar.SetButtonInfo(i+1, ID_BUTTON2, TBBS_GROUP |TBBS_CHECKBOX , 10);

m_wndToolBar.SetButtonInfo(i+2, ID_BUTTON3, TBBS_GROUP |TBBS_CHECKBOX , 11);

该代码设置三个相邻的按钮为互斥按钮,即同一时刻只能有一个按钮按下。

TBBS_GROUP |TBBS_CHECKBOX 等价于 TBBS_CHECKGROUP

例如:

int i = m_wndToolBar.CommandToIndex( ID_BUTTON1);

m_wndToolBar.SetButtonInfo(i, ID_BUTTON1, TBBS_SEPARATOR , 0);

上述代码将一个按钮设置成分隔条,并设置它的宽度为0,这可以用于动态隐藏工具条按钮

需要的时候,还可以把它重新显示回来:

int i = m_wndToolBar.CommandToIndex( ID_BUTTON1);

m_wndToolBar.SetButtonInfo(i, ID_BUTTON1, TBBS_BUTTON , 9);

当然,nStyle参数不仅仅可以用msdn上面提到的几种,比如CToolBarCtrl::SetButtonInfo就有更为强大的功能,这个以后会谈到。

(3)改变工具条按钮的图片。有的时候想在程序运行过程中,根据某些条件动态改变按钮的图片,

就可以用这个函数。方法如下:

(1) 在资源里面添加一个位图文件IDB_BITMAP1,注意它的高度和工具条位图的高度保持一致,然后里面可以有几个按钮图片。

(2) 工具条生成以后,把这些图片添加到工具条的图片列表:

CToolBarCtrl &toolctrl = m_wndToolBar.GetToolBarCtrl();

int TotalImage =toolctrl.AddBitmap(N, IDB_BITMAP1); //N给出位图中图片的个数

这个时候TotalImage里面就保存了工具条里面已经保存的按钮图片的个数,它比实际按钮个数要多,你可以

把这个值保存在CMainFrame类里面,供以后使用

(3) 在需要更换工具条按钮图片的时候,这样写:

int index = m_wndToolBar.CommandToIndex(ID_FILE_SAVE);

m_wndToolBar.SetButtonInfo(index, ID_FILE_SAVE, TBBS_BUTTON, TotalImage-1);

则将ID_FILE_SAVE按钮的图片设置成图片列表中的最后一个
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值