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. 附录

【MFC】对话框中创建工具栏相关推荐

  1. MFC对话框中添加工具栏

    1. 在资源管理器中添加 ToolBar资源,资源 ID为 IDR_TOOLBAR1 加入两个工具栏按钮 2. 在对话框头文件 XxxDlg.h中添加工具栏变量 CToolBar m_toolBar; ...

  2. MFC对话框中的工具栏、状态栏设计小结

    对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已. 对话框中建立工具栏的方法 工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标 ...

  3. MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应...

    MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文:  http://blog.csdn.net/supermanking/article/detail ...

  4. 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)

    用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...

  5. 在MFC对话框中显示html网页

    最近在写一个小软件,想在MFC对话框中显示帮助文档,都是html格式的,上网找了好多资料,用一个CHtmlCtrl类的东西,但是网上找的这个类放在VS2005下编译不过去,老是提示错误.于是几经修改, ...

  6. MFC对话框中的OnCancel方法

    MFC对话框中的OnCancel虚拟方法在如下三个时机被调用: 1.对话框按IDCANCEL按钮,直接通过CDialog的ON_COMMAND(IDCANCEL, &CDialog::OnCa ...

  7. MFC对话框中嵌入D3D

    文章根据pudn上下载的一个源码总结的.[源码]http://www.pudn.com/downloads186/sourcecode/windows/directx/detail874021.htm ...

  8. windows文本缩放影响mfc对话框_PhotoShop创建金属文本提示技巧

    创建一个新文件:在File菜单下,选择New.在出现的"新建文件"对话框中,输入以下值: 宽度:4英寸 高度:1英寸 分辨率:Web文本为72:300用于打印 模式:RGB颜色 内 ...

  9. 在MFC对话框中快速集成三维控件

    在MFC的对话框中可以方便的集成AnyCAD三维控件(c++版本),遵循一下几步: 1.在对话框资源中增加一个Static控件,ID为IDC_STATIC_3D,并且把它的Notify属性设置为Tru ...

最新文章

  1. (四)OpenStack---M版---双节点搭建---Glance安装和配置
  2. canny算子的运用
  3. mysql按章_mysql按时间范围分区
  4. Ubuntu系统桌面任务栏和启动器全部消失解决方案
  5. 滴滴配合警方调证不超 10 分钟;苹果否认恶意芯片报道;贝索斯建火箭中心 | 极客头条...
  6. 关于渐变属 gradient:
  7. c++两个文档匹配数据_MongoDB 数据库的命名、设计规范
  8. js基础-(二)-类和面向对象
  9. android支付宝支付界面设计,支付宝移动端App ui界面设计规范
  10. 二进制除法原理——两种简便方法
  11. Synchronized关键字深度解析
  12. 【数据分析】盘点五一期间最受欢迎的几个景区
  13. 这本武林秘籍赶快收好
  14. springboot 集成帆软报表,调用自定义报表 maven创建
  15. pyinstaller打包项目成绿色软件
  16. JAVA在线考试管理系统
  17. lol日服一直显示重新连接服务器,lol手游日服登录不了怎么办 日服进不去解决方法...
  18. 良心SQL注入手工教程(看完血虐sqlilabs全关)
  19. 好玩小游戏(17个)
  20. C# 4 中的 Dynamic 关键字

热门文章

  1. Quest Central for DataBase 5.0.1,6.1 (软件+注册)
  2. 有意思的onerror的用法
  3. JavaScript中的Window窗口对象【转载】
  4. (论坛答疑点滴)DataGrid的EditCommandColumn如何使用图片作为按钮?
  5. 宝塔php共生,宝塔面板如何开启php扩展
  6. python中最大值最小值平均值_来自lis的Python平均值、最大值、最小值
  7. centos 忘记root密码_Linux忘记root密码解决方案
  8. Java黑皮书课后题第10章:10.24(实现Character类)在Java库中提供了Character类,给出你自己对这个类的实现(将新类命名为MyCharacter)
  9. html 读取物理路径,.Net Core api 中获取应用程序物理路径wwwroot
  10. 洛谷P1396 营救 题解