MFC_创建工具栏

工具条在基于对话框的项目中和多文档项目中是不同的.在基于对话框添的项目中加一个工具条,远没有在文档视图里面加工具条方便。

先看一下效果图:

先来说一下多文档的项目:

1.首先添加资源文件:

(1)工具栏资源的最右边总是会有一个待编辑的按钮,我们对其进行编辑后,工具栏资源会自动增加一个新的空白按钮,这也实现了按钮的添加操作。如果我们想要删除某个按钮,就可以用鼠标左键点住它,拖出工具栏资源的范围即可。

(2)第三个按钮(保存按钮)和第四个按钮(剪切按钮)之间有一些间隙,在运行程序后会出现一个竖的分隔线,所以想要在两个按钮之间添加分隔线的话,可以用鼠标左键拖住右边的按钮往右稍移动一些就可以了。

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

遇到问题:

原因:在基于对话框的项目中用多文档的方法创建工具条

转载于:https://my.oschina.net/u/2930533/blog/3010578

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值