上一節中雞啄米講了菜單及CMenu類的使用,這一節講與菜單有密切聯系的工具欄。

       工具欄簡介

       工具欄一般位于主框架窗口的上部,菜單欄的下方,由一些帶圖片的按鈕組成。當用戶用鼠標單擊工具欄上某個按鈕時,程序會執行相應的操作,如果鼠標沒有點擊,只是停留在某個按鈕上一會后,會彈出一個小窗口顯示提示信息。

       一般工具欄中的按鈕在菜單欄中都有對應的菜單項中,即點擊工具欄按鈕與點擊菜單項的效果相同。但工具欄中的按鈕都顯式的排列出來,操作很方便,而且按鈕上的圖片描述功能更直觀,所以工具欄作為用戶操作接口來說比菜單更加便捷。

       VS2010工具欄資源詳解

       雞啄米仍然以VS2010/MFC編程入門之三十四(菜單:VS2010菜單資源詳解)中創建的單文檔工程Example34為基礎,講解工具欄資源。

       在Example34工程中,打開Resource View資源視圖,展開Example->Example34.rc->Toolbar,我們可以看到有一個ID為IDR_MAINFRAME的工具欄資源,雙擊打開,工具欄資源顯示如下:

 VS2010工具欄Toolbar

       以IDR_MAINFRAME工具欄的第一個按鈕為例說明工具欄按鈕的各項屬性。用鼠標單擊工具欄資源上的第一個按鈕,屬性頁中就會顯示其屬性。下面分別講解各項屬性。

       ID屬性:ID_FILE_NEW。不知大家是否還記得,菜單IDR_MAINFRAME的菜單項File->New的ID也是ID_FILE_NEW,兩者ID相同,正是如此才使得工具欄第一個按鈕與菜單項File->New能實現相同的功能。所以大家一定要記住,如果想讓工具欄某個按鈕與菜單欄某個菜單項點擊后執行的操作相同,就要為兩者設置相同的ID。

       Prompt屬性:Create a new document\nNew。此屬性為工具欄按鈕的提示文本。在鼠標指向此按鈕時,狀態欄中會顯示“Create a new document”,當彈出提示信息窗口時會顯示包含“New”的提示信息。“\n”是兩者的分隔轉義符。

       Height屬性:15。此屬性為工具欄按鈕的像素高度。

       Width屬性:16。此屬性為工具欄按鈕的像素寬度。

       工具欄資源的最右邊總是會有一個待編輯的按鈕,我們對其進行編輯后,工具欄資源會自動增加一個新的空白按鈕,這也實現了按鈕的添加操作。如果我們想要刪除某個按鈕,就可以用鼠標左鍵點住它,拖出工具欄資源的范圍即可。

       另外,我們看到,第三個按鈕(保存按鈕)和第四個按鈕(剪切按鈕)之間有一些間隙,在運行程序后會出現一個豎的分隔線,所以想要在兩個按鈕之間添加分隔線的話,可以用鼠標左鍵拖住右邊的按鈕往右稍移動一些就可以了。

       CToolBar類的主要成員函數

       MFC為工具欄的操作提供了CToolBar類。下面介紹CToolBar類的主要成員函數。

       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
        );

       創建工具欄對象。參數pParentWnd為工具欄父窗口的指針。參數dwCtrlStyle為工具欄按鈕的風格,默認為TBSTYLE_FLAT,即“平面的”。參數dwStyle為工具欄的風格,默認取值WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP,由于是主框架窗口的子窗口,所以要有WS_CHILD和WS_VISIBLE風格,CBRS_ALIGN_TOP風格表示工具欄位于父窗口的頂部, 各種風格可以參見MSDN的Toolbar Control and Button Styles中的定義。參數rcBorders為工具欄邊框各個方向的寬度,默認為CRect(0, 0, 0, 0),即沒有邊框。參數nID為工具欄子窗口的ID,默認為AFX_IDW_TOOLBAR。

       BOOL LoadBitmap(UINT nIDResource);

       為工具欄加載位圖。參數nIDResource為位圖資源的ID。成功則返回TRUE,否則返回FALSE。注意,這里的位圖資源應當為每個工具欄按鈕都提供位圖,如果圖片不是標準大小(16像素寬,15像素高),則需要調用SetSizes成員函數調整按鈕大小和圖片大小。

       BOOL LoadToolBar(UINT nIDResource);

       加載由nIDResource指定的工具欄。參數nIDResource為要加載的工具欄的資源ID。成功則返回TRUE,否則返回FALSE。

       void SetSizes(SIZE sizeButton,SIZE sizeImage);

       設置工具欄按鈕的大小和圖片的大小。參數sizeButton為工具欄按鈕的像素大小。參數sizeImage為圖片的像素大小。

       void SetButtonStyle(int nIndex,UINT nStyle);

       設置工具欄按鈕或分隔線的風格,或者為按鈕分組。參數nIndex為將要進行設置的按鈕或分隔線的索引。參數nStyle為按鈕風格,可以是以下取值:

       TBBS_BUTTON   標準按鈕(默認)
       TBBS_SEPARATOR   分隔條
       TBBS_CHECKBOX   復選框 
       TBBS_GROUP   標記一組按鈕的開始
       TBBS_CHECKGROUP   標記一組復選框的開始
       TBBS_DROPDOWN   創建下拉列表按鈕
       TBBS_AUTOSIZE   按鈕的寬度根據按鈕文本計算,而不基于圖片大小 
       TBBS_NOPREFIX   按鈕的文本沒有快捷鍵前綴

       UINT GetButtonStyle(int nIndex) const;

       獲取工具欄按鈕或分隔條的風格。風格可參考SetButtonStyle。參數nIndex為按鈕或分隔條的索引。

       BOOL SetButtonText(int nIndex,LPCTSTR lpszText);

       設置工具欄按鈕的文本。參數nIndex為工具欄按鈕的索引。參數lpszText為指向要設置的文本字符串的指針。設置成功則返回TRUE,否則返回FALSE。

       CString GetButtonText(int nIndex) const;

       獲取工具欄按鈕上顯示的文本。參數nIndex為工具欄按鈕的索引。

       本節內容就講到這里了,下節繼續講解VS2010工具欄的有關知識。謝謝大家對雞啄米和本教程的持續關注!

除非特別注明,雞啄米文章均為原創
轉載請標明本文地址:http://www.cpbsu.com/software/215.html
2012年8月3日
作者:雞啄米 分類:軟件開發 瀏覽: 評論:9