動(dòng)態(tài)改變工具條中按鈕的位圖
發(fā)表時(shí)間:2024-02-09 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]石家莊化工化纖有限公司 陳立敏 ---- 在VC++ 編程過(guò)程中,我們可以通過(guò)開(kāi)發(fā)環(huán)境中的資源編緝器加入或修改工具條中的按鈕,并為其指定一個(gè)位圖。但是這種指定是靜態(tài)的,如何在程序中動(dòng)態(tài)地改變工具條中按鈕的位圖,是我們下面要討論的問(wèn)題。首先,我們來(lái)了解兩個(gè)重要的類: ---- 1. CToolBa...
石家莊化工化纖有限公司 陳立敏
---- 在VC++ 編程過(guò)程中,我們可以通過(guò)開(kāi)發(fā)環(huán)境中的資源編緝器加入或修改工具條中的按鈕,并為其指定一個(gè)位圖。但是這種指定是靜態(tài)的,如何在程序中動(dòng)態(tài)地改變工具條中按鈕的位圖,是我們下面要討論的問(wèn)題。首先,我們來(lái)了解兩個(gè)重要的類:
---- 1. CToolBar (工具條類) :
---- CToolBar 類的對(duì)象是帶有一行位圖按鈕和可選分隔線的控件條,它的成員函數(shù)為你提供了Windows通用控件的大多數(shù)性能。以下是我們將要用到的成員函數(shù):
---- int CommandToIndex( UINT nID );
---- 功能:獲得 ID 值為 nID 的按鈕在工具條中的索引號(hào)。
---- (注:索引號(hào)代表了該按鈕在工具條中的位置。)
---- void GetButtonInfo(int nIndex,UINT& nID, UINT& nStyle, int& iImage);
---- 功能:獲得工具條中索引號(hào)為 nIndex 的按鈕的 ID 值,風(fēng)格和圖象索引號(hào)。
---- (注:圖象索引號(hào)代表了與該按鈕相關(guān)的圖象在整個(gè)工具條按鈕圖象列表中的位置。)
---- void SetButtonInfo( int nIndex, UINT nID, UINT nStyle, int iImage );
---- 功能:設(shè)置工具條中索引號(hào)為 nIndex 的按鈕的 ID 值,風(fēng)格和圖象索引號(hào)。
---- CToolBarCtrl & GetToolBarCtrl( ) const;
---- 功能:獲得與此CToolBar類相聯(lián)系的CToolBarCtrl( 工具條控制類)的指針。函數(shù)返回值為引用類型。
---- 2)CToolBarCtrl( 工具條控制類) :
---- CToolBarCtrl類的對(duì)象包含幾個(gè)重要的內(nèi)部數(shù)據(jù)結(jié)構(gòu):一個(gè)按鈕圖像列表,一個(gè)按鈕標(biāo)簽字符串列表和一個(gè)TBBUTTON結(jié)構(gòu)的列表,該結(jié)構(gòu)使一個(gè)圖像和/或字符串與按鈕的位置,風(fēng)格,主題和命令I(lǐng)D相關(guān)聯(lián)。它提供了Windows工具條通用控件的幾乎所有性能。它的成員函數(shù)使你能更加接近底層地去操作工具條控件。以下是我們將要用到的它的成員函數(shù):
---- int AddBitmap( int nNumButtons, UINT nBitmapID );
---- 功能:將一個(gè)或更多個(gè)位圖按鈕圖像添加到工具條控件的按鈕圖像列表中。
---- 其中nNumButtons 位圖中的按鈕圖像的數(shù)目。
---- nBitmapID 包含按鈕圖像或要增加圖像的位圖的資源標(biāo)識(shí)符。
---- 在下面的程序中,我們將實(shí)現(xiàn)這樣的功能:在主邊框窗口的工具條上有一個(gè)"紅燈"按鈕,當(dāng)用戶點(diǎn)擊該按鈕后,按鈕變?yōu)?quot;綠燈",再點(diǎn)擊又變?yōu)?quot;黃燈"….
---- 操作步驟如下:
---- (一)生成基本應(yīng)用程序框架:
---- 打開(kāi)開(kāi)發(fā)環(huán)境中的"文件"菜單,點(diǎn)擊"新建",選中Projects 標(biāo)簽中的 MFC AppWizard(exe) 項(xiàng),輸入項(xiàng)目名稱,然后回車;選中 Single document 單選按鈕,最后點(diǎn)擊"完成"。
---- (二)編緝工具條按鈕和位圖;
---- 1.在資源編緝器中,打開(kāi) ToolBar 新建一個(gè)按鈕(不用作圖)將其ID 改為 ID_LIGHT 。
---- 2.右擊 "resources"文件夾,選中"Insert…"項(xiàng),插入位圖資源。然后加入三個(gè)位圖,分別編緝?yōu)?quot;紅燈","綠燈"和"黃燈"三種圖象。ID值分別為:IDB_RED , IDB_GREEN , IDB_YELLOW 。
---- (三)增加成員變量:
---- 在CMainFrame 中加入六個(gè)成員變量:
UINT nID ;
UINT nStyle ;
Int index_red;
Int index_green;
Int index_yellow;
Int flag;
---- 并在構(gòu)造函數(shù)中將以上各成員變量均初始化為0。
---- (四)加入成員函數(shù):
---- 1.右擊CMainFrame 類,選中"Add Windows Message Handler…"項(xiàng),為CMainFrame加入響應(yīng)消息 WM_SETFOCUS 的成員函數(shù) OnSetFocus(CWnd* pOldWnd),在該函數(shù)中加入以下語(yǔ)句:
CToolBarCtrl & toolctrl=
m_wndToolBar.GetToolBarCtrl();
index_red=toolctrl.AddBitmap(1,IDB_RED);
index_green=toolctrl.AddBitmap(1,IDB_GREEN);
index_yellow=toolctrl.AddBitmap(1,IDB_YELLOW);
int index=m_wndToolBar.CommandToIndex(IDB_LIGHT);
int iImage;
m_wndToolBar.GetButtonInfo
(index,nID,nStyle,iImage);
m_wndToolBar.SetButtonInfo
(index,nID,nStyle,red_index);
---- 2.利用"Class Wizard"在CMainFrame 中加入按鈕命令 ID_LIGHT 的響應(yīng)函數(shù)OnLight() , 在函數(shù)中加入以下語(yǔ)句:
light + +;
if(light > 2)
light = 0;
switch(light)
{
case 0:
int index=m_wndToolBar.
CommandToIndex(IDB_LIGHT);
m_wndToolBar.SetButtonInfo
(index,nID,nStyle,index_red);
break;
case 1:
int index=m_wndToolBar.
CommandToIndex(IDB_LIGHT);
m_wndToolBar.SetButtonInfo
(index,nID,nStyle,index_green);
break;
case 2:
int index=m_wndToolBar.
CommandToIndex(IDB_LIGHT);
m_wndToolBar.SetButtonInfo
(index,nID,nStyle,index_yellow);
}
---- 好了,到現(xiàn)在可以編譯運(yùn)行了。
---- 上面的程序雖然簡(jiǎn)單,但基本上說(shuō)明了按鈕圖標(biāo)的動(dòng)態(tài)改變方法,在編制實(shí)時(shí)檢測(cè)(或控制)系統(tǒng)中,完全可以用此來(lái)自動(dòng)顯示儀器設(shè)備的運(yùn)行狀態(tài)。使人一目了然。