工具條在基於對話框的項目中和多文檔項目中是不一樣的.在基於對話框添的項目中加一個工具條,遠沒有在文檔視圖裏面加工具條方便。框架
先看一下效果圖:工具
先來講一下多文檔的項目:this
1.首先添加資源文件:指針
(1)工具欄資源的最右邊老是會有一個待編輯的按鈕,咱們對其進行編輯後,工具欄資源會自動增長一個新的空白按鈕,這也實現了按鈕的添加操做。若是咱們想要刪除某個按鈕,就能夠用鼠標左鍵點住它,拖出工具欄資源的範圍便可。code
(2)第三個按鈕(保存按鈕)和第四個按鈕(剪切按鈕)之間有一些間隙,在運行程序後會出現一個豎的分隔線,因此想要在兩個按鈕之間添加分隔線的話,能夠用鼠標左鍵拖住右邊的按鈕往右稍移動一些就能夠了。blog
(3)若是想用現成的bmp文件,先把按鈕數量添加夠,而後選中IDR_TOOLBAR右鍵屬性Filename字段寫好路徑,也能夠在這修改ID名稱.索引
2.在對話框的.h裏添加圖片
protected: CToolBar m_toolbar; //工具欄
XXXdlg.cpp的OnInitDialog()加載工具欄資源
//建立工具欄 m_toolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);//建立空白工具欄 m_toolbar.LoadToolBar(IDR_TOOLBAR);//加載工具欄資源 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
CToolBar ::Create的定義形式爲:文檔
virtual BOOL Create(CWnd* pParentWnd,DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,UINT nID = AFX_IDW_TOOLBAR);
第一個參數:pParentWnd:指向工具條父窗口的指針。
第二個參數:dwStyle :工具條的風格。
CBRS_TOP 表示工具條在框架窗口的頂部
CBRS_BOTTOM 表示工具條在框架窗口的底部
CBRS_NOALIGN 表示工具條在父窗口改變大小時不響應
CBRS_TOOLTIPS 表示工具條具備動態提示功能
CBRS_SIZE_DYNAMIC 表示工具條是靜態的不能改變
CBRS_SIZE_FIXED 表示工具條是動態的能夠改變
CBRS_FLOATING 表示工具條是浮動的
CBRS_FLYBY 表示狀態條上顯示工具條中按鈕的信息
CBRS_HIDE_INPLACE 表示工具條隱藏
第三個參數:nID :工具條子窗口的標識符。
CToolBar ::CreateEx的定義形式爲:
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 :
第三個參數:dwStyle :
第四個參數:rcBorders :
第五個參數:nID :
CToolBar ::LoadToolBar的定義形式爲:
BOOL LoadToolBar(UINT nIDResource );
參數:nIDResource :要加載的工具欄的資源ID
接下來是基於對話框項目:
(1)添加資源文件:
(2)在XXXdlg.cpp的OnInitDialog()加載工具欄
//建立工具欄 HWND hDlg=GetSafeHwnd();//對話框的窗口句柄 HINSTANCE hInstance=AfxGetInstanceHandle();//當前應用程序的實例句柄 //填充工具條按鈕結構: TBBUTTON ptoolbar[30]={{STD_FILENEW, //指定Windows的標準幫助圖標 IDR_TOOLBAR, //工具條按鈕的ID TBSTATE_ENABLED, //可用狀態 TBSTYLE_BUTTON, //指定建立一個能夠下按的按鈕 0, //保留,由應用程序定義該參數意義 0}, //按鈕字串索引 {STD_FILEOPEN, IDR_TOOLBAR, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0}, {STD_FILESAVE, IDR_TOOLBAR, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0}, //建立一個分割按鈕用的豎線 {0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, {STD_CUT, IDR_TOOLBAR, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0}, {STD_COPY, IDR_TOOLBAR, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0}, {STD_PASTE, IDR_TOOLBAR, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0}, {0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0}, {STD_PRINT, IDR_TOOLBAR, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0}, {STD_HELP, IDR_TOOLBAR, TBSTATE_ENABLED, TBSTYLE_BUTTON,0, 0}, }; //在對話框上動態建立工具條,並添加工具條按鈕: HWND hToolsWindow=::CreateToolbarEx(hDlg, //指定對話框爲父窗口,將工具條建立在對話框上 WS_CHILD|WS_VISIBLE|TBSTYLE_WRAPABLE|TBSTYLE_TOOLTIPS| TBSTYLE_FLAT|CCS_ADJUSTABLE,//指定工具條的建立風格 IDR_TOOLBAR,//預約義的工具條資源ID 30,HINST_COMMCTRL, //包含圖片資源的可執行文件的實例句柄 IDB_STD_SMALL_COLOR,//圖片的資源ID ptoolbar, //待添加的按鈕 10, //加入到工具條的按鈕的個數 0,0,0,0,sizeof(TBBUTTON)); //從IDR_TOOLBAR資源中裝載按鈕圖標到對話框的工具條上 TBADDBITMAP tab; tab.hInst=hInstance; tab.nID=IDR_TOOLBAR; ::SendMessage(hToolsWindow,TB_ADDBITMAP,(WPARAM)3,(LPARAM)&tab);
TBBUTTON:關聯圖像和/或字符串與按鈕的位置,風格,主題和命令ID.
TBBUTTON定義形式爲:
typedef struct _TBBUTTON { int iBitmap; int idCommand; BYTE fsState; BYTE fsStyle; DWORD_PTR dwData; INT_PTR iString; } TBBUTTON, NEAR* PTBBUTTON, *LPTBBUTTON; typedef const TBBUTTON *LPCTBBUTTON;
第一個參數:iBitmap:從0開始記數的按鈕圖象的索引;若是是Windows標準的一些工具條按鈕,CommCtrl.h頭文件中有詳細定義.STD_CUT,STD_COPY,STD_PASTE,STD_UNDO,STD_REDOW
第二個參數:idCommand:工具條的資源id;
第三個參數:fsState:按鈕的狀態標誌.TBSTATE_CHECKED、TBSTATE_ELLIPSES、TBSTATE_ENABLED、TBSTATE_HIDDEN、TBSTATE_INDETERMINATE、TBSTATE_MARKED、TBSTATE_PRESSED、TBSTATE_WRAP。
第四個參數:fsStyle:按鈕的風格;
第五個參數:dwData:應用程序定義的值,一般爲0;
第六個參數:iString:從0開始技術的按鈕字串的索引.
遇到問題:
緣由:在基於對話框的項目中用多文檔的方法建立工具條