細談SetButtonInfo函數及其用途

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.