MFC_建立工具欄

工具條在基於對話框的項目中和多文檔項目中是不一樣的.在基於對話框添的項目中加一個工具條,遠沒有在文檔視圖裏面加工具條方便。框架

先看一下效果圖:工具

先來講一下多文檔的項目: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開始技術的按鈕字串的索引.

遇到問題:

緣由:在基於對話框的項目中用多文檔的方法建立工具條

相關文章
相關標籤/搜索