【MFC】对话框中创建工具栏
00. 目录
文章目录
- 00. 目录
- 01. 案例概述
- 02. 开发环境
- 03. 关键技术
- 04. 程序设计
- 05. 秘笈心法
- 06. 源码下载
- 07. 附录
01. 案例概述
使用MFC向导可以创建基于文档视图结构的应用程序也可以创建基于对话框的应用程序,向导默认生成的文档视图结构的应用程序带有工具栏,而对话框的应用程序没有带任何工具栏,本实例演示如何在对话框中创建工具栏,效果如下图所示。

02. 开发环境
系统环境:Windows 10
开发环境:Visual Studio 2019
03. 关键技术
MFC提供了工具栏类CToolBarCtrl来创建工具栏。创建工具栏使用Create方法,向工具栏中添加按钮使用AddButtons方法。
Create方法:
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
返回值:如果成功则返回非零值;否则返回零。参数: dwStyle 指定工具条控件的风格。工具条必须总是具有WS_CHILD风格。另外,你可以为工具条指定在说明部分描述的工具条风格和窗口风格的任意组合。 rect 随意指定该工具条控件的尺寸和位置。它可以是一个CRect对象或一个RECT结构。 pParentWnd 指定工具条控件的父窗口。它不能是NULL。 nID 指定工具条控件的ID。
AddButtons方法
BOOL AddButtons( int nNumButtons, LPTBBUTTON lpButtons );
功能该方法是用来设置工具栏上的按钮。
参数描述nNumButtons:工具栏按钮的数量。lpButtons:TBBUTTON结构体类型的指针。TBBUTTON结构体中包含了工具栏按钮的命令ID值、图标索引、按钮名称等数据成员。
04. 程序设计
(1)新建一个基于对话框的应用程序。
(2)在CDialogToolBarDlg类中定义一个CToolBarCtrl对象和一个CImageList对象。
private:CToolBarCtrl m_ToolBarCtrl;CImageList m_ImageList;
(3)在自定义函数InitToolBar中动态创建工具栏,函数实现代码如下。
//初始化工具栏
void CMy3ToolBarDlg::InitToolBar()
{CString strPath;HICON hIcon;//创建图像列表m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//向图像列表中添加图标for (int i = 0; i < 10; i++){//获取图片的路径strPath.Format(TEXT(".\\res\\ico\\%02d.ico"), i);//加载图标hIcon = (HICON)::LoadImage(NULL, strPath, IMAGE_ICON, 32, 32, LR_LOADFROMFILE);m_ImageList.Add(hIcon);}//创建工具栏m_ToolBarCtrl.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 154231);//工具栏支持自动化m_ToolBarCtrl.EnableAutomation();//设置工具栏的图像列表m_ToolBarCtrl.SetImageList(&m_ImageList);TBBUTTON button[11];for (int j = 0; j < 11; j++){button[j].dwData = 0;//工具栏按钮为可用button[j].fsState = TBSTATE_ENABLED;//工具栏按钮样式button[j].fsStyle = TBSTYLE_BUTTON;}//设置工具栏按钮的命令ID值button[0].idCommand = ID_ADDDATA;//设置图标索引button[0].iBitmap = 0;//设置工具栏按钮名称button[0].iString = m_ToolBarCtrl.AddStrings(TEXT("添加"));//设置工具栏按钮的命令ID值button[1].idCommand = ID_UPDATEDATA;//设置图标索引button[1].iBitmap = 1;//设置工具栏按钮名称button[1].iString = m_ToolBarCtrl.AddStrings(TEXT("修改"));//设置工具栏按钮的命令ID值button[2].idCommand = ID_DELETEDATA;//设置图标索引button[2].iBitmap = 2;//设置工具栏按钮名称button[2].iString = m_ToolBarCtrl.AddStrings(TEXT("删除"));button[3].fsStyle = TBSTYLE_SEP;//设置工具栏按钮的命令ID值button[4].idCommand = ID_FIRSTDATA;//设置图标索引button[4].iBitmap = 3;//设置工具栏按钮名称button[4].iString = m_ToolBarCtrl.AddStrings(TEXT("第一条"));//设置工具栏按钮的命令ID值button[5].idCommand = ID_PREVIOUSDATA;//设置图标索引button[5].iBitmap = 4;//设置工具栏按钮名称button[5].iString = m_ToolBarCtrl.AddStrings(TEXT("上一条"));//设置工具栏按钮的命令ID值button[6].idCommand = ID_NEXTDATA;//设置图标索引button[6].iBitmap = 5;//设置工具栏按钮名称button[6].iString = m_ToolBarCtrl.AddStrings(TEXT("下一条"));//设置工具栏按钮的命令ID值button[7].idCommand = ID_LASTDATA;//设置图标索引button[7].iBitmap = 6;//设置工具栏按钮名称button[7].iString = m_ToolBarCtrl.AddStrings(TEXT("末一条"));button[8].fsStyle = TBSTYLE_SEP;//设置工具栏按钮的命令ID值button[9].idCommand = ID_SAVEDATA;//设置图标索引button[9].iBitmap = 7;//设置工具栏按钮名称button[9].iString = m_ToolBarCtrl.AddStrings(TEXT("保存"));//设置工具栏按钮的命令ID值button[10].idCommand = ID_CANCELDATA;//设置图标索引button[10].iBitmap = 8;//设置工具栏按钮名称button[10].iString = m_ToolBarCtrl.AddStrings(TEXT("取消"));//向工具栏中添加按钮m_ToolBarCtrl.AddButtons(11, button);//自动调整工具栏的大小m_ToolBarCtrl.AutoSize();//设置工具栏的样式m_ToolBarCtrl.SetStyle(TBSTYLE_FLAT | CCS_TOP);}BOOL CMy3ToolBarDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标// TODO: 在此添加额外的初始化代码InitToolBar();return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
05. 秘笈心法
工具栏的创建方法
CToolBarCtrl类是创建工具栏控件的类,而CToolBar类是创建工具栏的类,CToolBar类包含了CToolBarCtrl类,文档视图结构通常使用CToolBar类来创建工具栏,CToolBar类可以直接通过加载位图来生成工具栏,也可以调用CToolBarCtrl对象进行工具栏的设置。
06. 源码下载
下载:对话框中创建工具栏.rar
07. 附录
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
