工具条在基于对话框的项目中和多文档项目中是不一样的.在基于对话框添的项目中加一个工具条,远没有在文档视图里面加工具条方便。框架
先看一下效果图:工具
先来讲一下多文档的项目: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开始技术的按钮字串的索引.
遇到问题:
缘由:在基于对话框的项目中用多文档的方法建立工具条