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按鈕的圖片設定成圖片列表中的最後一個。