00. 目录

文章目录

  • 00. 目录
  • 01. 案例概述
  • 02. 开发环境
  • 03. 关键技术
  • 04. 程序设计
  • 05. 秘笈心法
  • 06. 源码下载
  • 07. 附录

01. 案例概述

多选效果就是指工具栏按钮有按下的效果,这种按钮再次按动时才能弹起,不具备自动弹起的功能。多选效果在应用软件中经常遇到,例如WORD软件中,文本是否具有粗体、斜线和下划线的效果,通过工具栏按钮的多选效果可以一目了然,给用户带来便捷。按钮效果如下图所示。

温馨提示

工具栏中的按钮与消息处理函数映射好之后才可以使用,否则是灰色的按钮。

02. 开发环境

系统环境:Windows 10

开发环境:Visual Studio 2019

03. 关键技术

同实现工具栏按钮单选效果的方法相同,多选效果任然通过类CToolBar的SetButtonInfo方法实现,只要将nStyle参数的取值设置为TBBS_CHECKBOX,工具栏上的按钮就具有多选效果了。

04. 程序设计

(1)新建一个基于单文档视图结构的应用程序。

(2)在CMainFrame类中声明一个CToolBar对象和CImageList对象。

protected:  // 控件条嵌入成员//CToolBar          m_wndToolBar;CStatusBar        m_wndStatusBar;CToolBar m_ToolBar;CImageList m_ImageList;int m_PosY = 0;

(3)在CMainFrame类的OnCreate函数中创建工具栏,函数实现代码如下。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;if (!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | CBRS_FLOATING | WS_VISIBLE | CBRS_ALIGN_TOP | TBSTYLE_FLAT)){TRACE0("未能创建工具栏\n");return -1;      // 未能创建}//创建图像列表m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);CString strPath;HICON hIcon;for (int i = 1; i < 10; i++){strPath.Format(TEXT(".\\res\\toolbar\\%02d.ico"), i);hIcon = (HICON)LoadImage(NULL, strPath, IMAGE_ICON, 32, 32, LR_LOADFROMFILE);m_ImageList.Add(hIcon);}//设置工具栏按钮m_ToolBar.SetButtons(NULL, 9);//设置工具栏按钮样式集资源IDm_ToolBar.SetButtonInfo(0, ID_ADDDATA, TBBS_CHECKBOX, 0);m_ToolBar.SetButtonText(0, TEXT("优化"));m_ToolBar.SetButtonInfo(1, ID_UPDATEDATA, TBBS_CHECKBOX, 1);m_ToolBar.SetButtonText(1, TEXT("调试"));m_ToolBar.SetButtonInfo(2, ID_DELETEDATA, TBBS_CHECKBOX, 2);m_ToolBar.SetButtonText(2, TEXT("平台"));m_ToolBar.SetButtonInfo(3, ID_FIRSTDATA, TBBS_CHECKBOX, 3);m_ToolBar.SetButtonText(3, TEXT("编码"));m_ToolBar.SetButtonInfo(4, ID_PREVIOUSDATA, TBBS_CHECKBOX, 4);m_ToolBar.SetButtonText(4, TEXT("语言"));m_ToolBar.SetButtonInfo(5, ID_NEXTDATA, TBBS_CHECKBOX, 5);m_ToolBar.SetButtonText(5, TEXT("移植"));m_ToolBar.SetButtonInfo(6, ID_LASTDATA, TBBS_CHECKBOX, 6);m_ToolBar.SetButtonText(6, TEXT("双核"));m_ToolBar.SetButtonInfo(7, ID_SAVEDATA, TBBS_CHECKBOX, 7);m_ToolBar.SetButtonText(7, TEXT("64位"));m_ToolBar.SetButtonInfo(8, ID_CANCELDATA, TBBS_CHECKBOX, 8);m_ToolBar.SetButtonText(8, TEXT("内存"));if (!m_wndStatusBar.Create(this)){TRACE0("未能创建状态栏\n");return -1;      // 未能创建}m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));//设置工具栏按钮大小m_ToolBar.GetToolBarCtrl().SetButtonSize(CSize(60, 55));m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);m_PosY = 80;return 0;
}

(4)设置工具栏按钮和处理函数映射

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()ON_COMMAND_RANGE(ID_ADDDATA, ID_ADDDATA + 9, OnMenuClick)
END_MESSAGE_MAP()void CMainFrame::OnMenuClick(UINT nItemID)
{CString str, strResult;CDC* pDC = GetDC();m_ToolBar.GetButtonText(nItemID - ID_ADDDATA, str);strResult = TEXT("您选择了: " + str);pDC->TextOutW(10, m_PosY, strResult);m_PosY += 20;}

05. 秘笈心法

复选按钮状态的记录

对于选中的复选按钮应使用布尔变量进行记录,每一个按钮对应一个布尔变量,最后通过对布尔变量的判断可以得到哪些按钮已经被按下,如果两个复选按钮不能同时按下,此时就可以进行判断。

06. 源码下载

下载:【MFC】工具栏按钮多选效果本.rar

07. 附录

【MFC】工具栏按钮多选效果本相关推荐

  1. 【MFC】工具栏按钮的热点效果

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 工具栏按钮的热点效果可 ...

  2. 【MFC】CMenu实现菜单栏/工具栏、工具栏前勾选效果、菜单文本动态调整

    [MFC]CMenu实现菜单栏/工具栏.工具栏前勾选效果.菜单文本动态调整 说明 菜单栏/工具栏的创建 添加菜单栏/工具栏 工具栏前勾选效果 菜单文本动态调整 其他 说明 主要介绍该如何加载菜单栏.工 ...

  3. 【MFC】工具栏按钮单选效果

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 Visual C++在 ...

  4. 【MFC】工具栏按钮追加显示文本

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 工具栏中的按钮并不一定 ...

  5. Flutter实战视频-移动电商-60.购物车_全选按钮的交互效果制作

    60.购物车_全选按钮的交互效果制作 主要做全选和复选框的这两个功能 provide/cart.dart 业务逻辑写到provide里面 先持久化取出来字符串,把字符串编程list.循环list ca ...

  6. VC MFC工具栏(CToolBar)控件

    工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建, ...

  7. MFC 图片按钮的实现

    1.CBitmapButton 方式实现 在MFC工具栏,添加按钮到界面,然后会修改按钮的属性,设置Owner draw为true; CBitmapButton只用于添加bmp位图,其他图片会有一些兼 ...

  8. MFC工具栏资源及CToolBar类

    MFC工具栏资源及CToolBar类: MFC工具栏: 一个工具栏是一个Windows控件,它允许用户通过点击一个按钮,而不是使用菜单执行窗体上的一些行动. 1.工具栏提供了一组方便的按钮,通过将最易 ...

  9. angular点击按钮弹出页面_Axure RP8:如何做出点击按钮切换页面效果?

    如何利用Axure RP8做出点击按钮切换页面效果?一起来文中看看~ 先来看一下页面的效果图:点击不同的按钮,切换不同的页面.(是web端和手机端都很常见的交互效果) 实现这一效果大致要分为三个步骤: ...

最新文章

  1. Python模块-创建和执行程序(或者脚本)
  2. 读书笔记:理论生态学原理及应用(一)——合作的机制
  3. JVM判断对象是否已死?
  4. ubuntu下安装wine
  5. 异常记录-No module named ‘numpy.core._multiarray_umath
  6. python爬虫招聘-Python爬虫抓取智联招聘(基础版)
  7. ecshop简单三部实现导航分类二级菜单
  8. Jmeter 在 beanshell 脚本中写日志
  9. 01_什么是one-hot编码、one-hot编码过程详解、为什么需要one-hot编码?one-hot编码的优缺点、使用sklearn中的API举例
  10. JQuery常用功能的性能优化
  11. 已知两点坐标如何快速增加其他坐标_「测绘精选」坐标转换概述
  12. 必须使用初始化列表的情况
  13. html 动物特效,分享9款用HTML5/CSS3制作的动物人物动画,
  14. linux export 生效_Linux之提高命令行的工作效率
  15. Dubbo原理和源码解析之服务暴露
  16. OpenCV C++案例实战二十《银行卡号识别》
  17. iOS悬浮、可拖动、自动吸附屏幕边缘的按钮制作
  18. ubuntu安装aircrack-ng/reaver/minidwep-gtk用来跑pin
  19. Md5是什么?MD5怎么校验?Md5校验工具怎么用?
  20. android wp模拟器,玩家必看,WP8 ROM模拟器游戏图文教程

热门文章

  1. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
  2. 在pl/sql中使用exp/imp工具实现oracle数据导出/导入
  3. M2第三天DailyScrum——PM(李忠)
  4. Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点
  5. Java黑皮书课后题第7章:**7.18(冒泡排序)使用冒泡排序算法编写一个排序方法。编写一个测试程序,读取10个double型的值,调用这个方法,然后显示排序好的数字
  6. 课程设计---停车场管理系统
  7. Vuex新手的理解与使用
  8. 【转载】JAVAEE之内置对象和属性范围
  9. java虚拟机 第二章Java内存区域与内存溢出异常
  10. 从 0 到 1 实现 React 系列 —— 2.组件和 state|props