(转载)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)
?上一節(jié)中雞啄米講了菜單及CMenu類的使用,這一節(jié)講與菜單有密切聯(lián)系的工具欄。
???????工具欄簡(jiǎn)介
?????? 工具欄一般位于主框架窗口的上部,菜單欄的下方,由一些帶圖片的按鈕組成。當(dāng)用戶用鼠標(biāo)單擊工具欄上某個(gè)按鈕時(shí),程序會(huì)執(zhí)行相應(yīng)的操作,如果鼠標(biāo)沒(méi)有點(diǎn)擊,只是停留在某個(gè)按鈕上一會(huì)后,會(huì)彈出一個(gè)小窗口顯示提示信息。
???????一般工具欄中的按鈕在菜單欄中都有對(duì)應(yīng)的菜單項(xiàng)中,即點(diǎn)擊工具欄按鈕與點(diǎn)擊菜單項(xiàng)的效果相同。但工具欄中的按鈕都顯式的排列出來(lái),操作很方便,而且按鈕上的圖片描述功能更直觀,所以工具欄作為用戶操作接口來(lái)說(shuō)比菜單更加便捷。
???????VS2010工具欄資源詳解
?????? 雞啄米仍然以VS2010/MFC編程入門之三十四(菜單:VS2010菜單資源詳解)中創(chuàng)建的單文檔工程Example34為基礎(chǔ),講解工具欄資源。
?????? 在Example34工程中,打開Resource View資源視圖,展開Example->Example34.rc->Toolbar,我們可以看到有一個(gè)ID為IDR_MAINFRAME的工具欄資源,雙擊打開,工具欄資源顯示如下:
?
?????? 以IDR_MAINFRAME工具欄的第一個(gè)按鈕為例說(shuō)明工具欄按鈕的各項(xiàng)屬性。用鼠標(biāo)單擊工具欄資源上的第一個(gè)按鈕,屬性頁(yè)中就會(huì)顯示其屬性。下面分別講解各項(xiàng)屬性。
?????? ID屬性:ID_FILE_NEW。不知大家是否還記得,菜單IDR_MAINFRAME的菜單項(xiàng)File->New的ID也是ID_FILE_NEW,兩者ID相同,正是如此才使得工具欄第一個(gè)按鈕與菜單項(xiàng)File->New能實(shí)現(xiàn)相同的功能。所以大家一定要記住,如果想讓工具欄某個(gè)按鈕與菜單欄某個(gè)菜單項(xiàng)點(diǎn)擊后執(zhí)行的操作相同,就要為兩者設(shè)置相同的ID。
?????? Prompt屬性:Create a new document\nNew。此屬性為工具欄按鈕的提示文本。在鼠標(biāo)指向此按鈕時(shí),狀態(tài)欄中會(huì)顯示“Create a new document”,當(dāng)彈出提示信息窗口時(shí)會(huì)顯示包含“New”的提示信息。“\n”是兩者的分隔轉(zhuǎn)義符。
???????Height屬性:15。此屬性為工具欄按鈕的像素高度。
?????? Width屬性:16。此屬性為工具欄按鈕的像素寬度。
?????? 工具欄資源的最右邊總是會(huì)有一個(gè)待編輯的按鈕,我們對(duì)其進(jìn)行編輯后,工具欄資源會(huì)自動(dòng)增加一個(gè)新的空白按鈕,這也實(shí)現(xiàn)了按鈕的添加操作。如果我們想要?jiǎng)h除某個(gè)按鈕,就可以用鼠標(biāo)左鍵點(diǎn)住它,拖出工具欄資源的范圍即可。
?????? 另外,我們看到,第三個(gè)按鈕(保存按鈕)和第四個(gè)按鈕(剪切按鈕)之間有一些間隙,在運(yùn)行程序后會(huì)出現(xiàn)一個(gè)豎的分隔線,所以想要在兩個(gè)按鈕之間添加分隔線的話,可以用鼠標(biāo)左鍵拖住右邊的按鈕往右稍移動(dòng)一些就可以了。
???????CToolBar類的主要成員函數(shù)
???????MFC為工具欄的操作提供了CToolBar類。下面介紹CToolBar類的主要成員函數(shù)。
???????virtual BOOL CreateEx(
???????????????? CWnd* pParentWnd,
???????????????? DWORD dwCtrlStyle = TBSTYLE_FLAT,
???????????????? DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP,
???????????????? CRect rcBorders = CRect(0, 0, 0, 0),
???????????????? UINT nID = AFX_IDW_TOOLBAR
??????? );
???????創(chuàng)建工具欄對(duì)象。參數(shù)pParentWnd為工具欄父窗口的指針。參數(shù)dwCtrlStyle為工具欄按鈕的風(fēng)格,默認(rèn)為TBSTYLE_FLAT,即“平面的”。參數(shù)dwStyle為工具欄的風(fēng)格,默認(rèn)取值WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP,由于是主框架窗口的子窗口,所以要有WS_CHILD和WS_VISIBLE風(fēng)格,CBRS_ALIGN_TOP風(fēng)格表示工具欄位于父窗口的頂部, 各種風(fēng)格可以參見(jiàn)MSDN的Toolbar Control and Button Styles中的定義。參數(shù)rcBorders為工具欄邊框各個(gè)方向的寬度,默認(rèn)為CRect(0, 0, 0, 0),即沒(méi)有邊框。參數(shù)nID為工具欄子窗口的ID,默認(rèn)為AFX_IDW_TOOLBAR。
???????BOOL LoadBitmap(UINT nIDResource);
?????? 為工具欄加載位圖。參數(shù)nIDResource為位圖資源的ID。成功則返回TRUE,否則返回FALSE。注意,這里的位圖資源應(yīng)當(dāng)為每個(gè)工具欄按鈕都提供位圖,如果圖片不是標(biāo)準(zhǔn)大小(16像素寬,15像素高),則需要調(diào)用SetSizes成員函數(shù)調(diào)整按鈕大小和圖片大小。
???????BOOL LoadToolBar(UINT nIDResource);
???????加載由nIDResource指定的工具欄。參數(shù)nIDResource為要加載的工具欄的資源ID。成功則返回TRUE,否則返回FALSE。
???????void SetSizes(SIZE sizeButton,SIZE sizeImage);
?????? 設(shè)置工具欄按鈕的大小和圖片的大小。參數(shù)sizeButton為工具欄按鈕的像素大小。參數(shù)sizeImage為圖片的像素大小。
???????void SetButtonStyle(int nIndex,UINT nStyle);
?????? 設(shè)置工具欄按鈕或分隔線的風(fēng)格,或者為按鈕分組。參數(shù)nIndex為將要進(jìn)行設(shè)置的按鈕或分隔線的索引。參數(shù)nStyle為按鈕風(fēng)格,可以是以下取值:
?????? TBBS_BUTTON?? 標(biāo)準(zhǔn)按鈕(默認(rèn))
?????? TBBS_SEPARATOR???分隔條?
?????? TBBS_CHECKBOX???復(fù)選框?
?????? TBBS_GROUP?? 標(biāo)記一組按鈕的開始
?????? TBBS_CHECKGROUP?? 標(biāo)記一組復(fù)選框的開始
?????? TBBS_DROPDOWN?? 創(chuàng)建下拉列表按鈕
?????? TBBS_AUTOSIZE?? 按鈕的寬度根據(jù)按鈕文本計(jì)算,而不基于圖片大小?
?????? TBBS_NOPREFIX?? 按鈕的文本沒(méi)有快捷鍵前綴
???????UINT GetButtonStyle(int nIndex) const;
?????? 獲取工具欄按鈕或分隔條的風(fēng)格。風(fēng)格可參考SetButtonStyle。參數(shù)nIndex為按鈕或分隔條的索引。
???????BOOL SetButtonText(int nIndex,LPCTSTR lpszText);
?????? 設(shè)置工具欄按鈕的文本。參數(shù)nIndex為工具欄按鈕的索引。參數(shù)lpszText為指向要設(shè)置的文本字符串的指針。設(shè)置成功則返回TRUE,否則返回FALSE。
???????CString GetButtonText(int nIndex) const;
?????? 獲取工具欄按鈕上顯示的文本。參數(shù)nIndex為工具欄按鈕的索引。
?????? 本節(jié)內(nèi)容就講到這里了,下節(jié)繼續(xù)講解VS2010工具欄的有關(guān)知識(shí)。謝謝大家對(duì)雞啄米和本教程的持續(xù)關(guān)注!
?
原文地址:http://www.jizhuomi.com/software/215.html
轉(zhuǎn)載于:https://www.cnblogs.com/wodehao0808/p/6758534.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的(转载)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一些Java面试题深入分析
- 下一篇: numpy函数:[6]arange()详