天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 41|回复: 0

MFC_创建工具栏

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
工具条在基于对话框的项目中和多文档项目中是不同的.在基于对话框添的项目中加一个工具条,远没有在文档视图里面加工具条方便。

先看一下效果图:



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

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

遇到问题:



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

 

 

 

 

MFC_创建工具栏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:43 , Processed in 0.170554 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表