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开始技术的按钮字串的索引.

遇到问题:

缘由:在基于对话框的项目中用多文档的方法建立工具条

相关文章
相关标签/搜索