00. 目录

文章目录

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

01. 案例概述

Visual C++在设计对话框资源的时候,有一个控件选择的工具栏,该工具栏上的按钮只有一个是有效的。案例效果如下图所示。

02. 开发环境

系统环境:Windows 10

开发环境:Visual Studio 2019

03. 关键技术

使用工具栏类CToolBar的SetButtonInfo方法可以修改工具栏按钮的样式,方法中的nStyle参数就是用来设置按钮具体的样式,将样式设置为TBBS_GROUP和TBBS_CHECKGROUP就可以实现单选效果。TBBS_GROUP决定哪些按钮是一组单选按钮,用TBBS_CHECKGROUP分别设置每个按钮。

04. 程序设计

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

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

protected:  // 控件条嵌入成员//CToolBar          m_wndToolBar;CStatusBar        m_wndStatusBar;CToolBar m_ToolBar;CImageList m_ImageList;CRect m_RectFloat;

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

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;//if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||//  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))//{//  TRACE0("未能创建工具栏\n");//    return -1;      // 未能创建//}if (!m_wndStatusBar.Create(this)){TRACE0("未能创建状态栏\n");return -1;      // 未能创建}m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); TODO: 如果不需要可停靠工具栏,则删除这三行//m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);//EnableDocking(CBRS_ALIGN_ANY);//DockControlBar(&m_wndToolBar);if (!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)){TRACE0("未能创建工具栏\n");return -1;      // 未能创建}//创建图像列表m_ImageList.Create(24, 24, ILC_COLOR32 | ILC_MASK, 0, 0);//向图像列表中添加图像CString strPath;HICON hIcon;for (int i = 0; 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, 6);//设置工具栏首按钮的状态UINT nStyle;m_ToolBar.SetButtonInfo(0, ID_POINTER, TBBS_GROUP | TBBS_CHECKGROUP, 0);//获取工具栏按钮的状态nStyle = m_ToolBar.GetButtonStyle(0);//设置工具栏按钮是否另行显示nStyle &= ~TBBS_WRAPPED;//设置工具栏按钮的样式m_ToolBar.SetButtonStyle(0, nStyle);m_ToolBar.SetButtonInfo(1, ID_PEN, TBBS_CHECKGROUP, 1);//获取工具栏按钮的状态nStyle = m_ToolBar.GetButtonStyle(1);//设置工具栏按钮是否另行显示nStyle &= ~TBBS_WRAPPED;//设置工具栏按钮的样式m_ToolBar.SetButtonStyle(1, nStyle);m_ToolBar.SetButtonInfo(2, ID_RECTANGLE, TBBS_CHECKGROUP, 2);//获取工具栏按钮的状态nStyle = m_ToolBar.GetButtonStyle(2);//设置工具栏按钮是否另行显示nStyle &= ~TBBS_WRAPPED;//设置工具栏按钮的样式m_ToolBar.SetButtonStyle(2, nStyle);m_ToolBar.SetButtonInfo(3, ID_PARALLE, TBBS_CHECKGROUP, 3);//获取工具栏按钮的状态nStyle = m_ToolBar.GetButtonStyle(3);//设置工具栏按钮是否另行显示nStyle &= ~TBBS_WRAPPED;//设置工具栏按钮的样式m_ToolBar.SetButtonStyle(3, nStyle);m_ToolBar.SetButtonInfo(4, ID_ROUND, TBBS_CHECKGROUP, 4);//获取工具栏按钮的状态nStyle = m_ToolBar.GetButtonStyle(4);//设置工具栏按钮是否另行显示nStyle &= ~TBBS_WRAPPED;//设置工具栏按钮的样式m_ToolBar.SetButtonStyle(4, nStyle);m_ToolBar.SetButtonInfo(5, ID_ROUNDRECT, TBBS_CHECKGROUP, 5);//获取工具栏按钮的状态nStyle = m_ToolBar.GetButtonStyle(5);//设置工具栏按钮是否另行显示nStyle &= ~TBBS_WRAPPED;//设置工具栏按钮的样式m_ToolBar.SetButtonStyle(5, nStyle);//刷新工具栏m_ToolBar.Invalidate();//重新计算框架内窗体布局m_ToolBar.GetParentFrame()->RecalcLayout();//设置工具栏按钮大小m_ToolBar.GetToolBarCtrl().SetButtonSize(CSize(31, 32));//设置工具栏图标列表m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);//设置工具栏停靠方式m_ToolBar.EnableDocking(0);//设置窗口停靠方式EnableDocking(0);m_ToolBar.SetWindowTextW(TEXT("工具栏"));GetWindowRect(&m_RectFloat);//计算工具栏显示位置CPoint point(m_RectFloat.left + 100, m_RectFloat.top + 100);//将工具栏进行浮动显示FloatControlBar(&m_ToolBar, point, CBRS_ALIGN_LEFT);return 0;
}

(4)将命令ID映射到处理函数

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()ON_COMMAND_RANGE(ID_POINTER, ID_POINTER + 6, OnMenuClick)
//  ON_WM_MENUSELECT()
END_MESSAGE_MAP()void CMainFrame::OnMenuClick(UINT nId)
{}

05. 秘笈心法

工具栏按钮的Group属性

取值TBBS_GROUP用法和单选按钮控件(Radio Button)的Group属性相同,单选按钮控件的Group属性只在一组按钮中的第一按钮上设置,其后的单选按钮都和第一个设置Group属性的按钮是一组,一个窗体只要有一个Group属性的单选按钮控件就可以实现单选效果。

06. 源码下载

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

07. 附录

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

  1. 【MFC】工具栏按钮多选效果本

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

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

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

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

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

  4. 【MFC】工具栏左侧双线效果

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 由MFC向导创建的文档 ...

  5. MFC 图片按钮的实现

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

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

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

  7. Gridview 单选效果实现,且用且珍惜

    Gridview 单选效果,在androidapp中实现非常频繁,我这里提供我的一种思路,这是我的思维导图: 怎么样将这样的思维导图翻译成java代码了,请看下面的代码了: // 电子产品的图片列表信 ...

  8. C#Windows7任务栏开发Thumbnail Toolbars(缩略图、工具栏按钮)

    C#Windows7任务栏开发Thumbnail Toolbars(缩略图.工具栏按钮) 依旧是在扩展WMP播放器功能时所遇到的问题,我想要实现Windows7所带来的任务栏特性,直接看图. 以网易云 ...

  9. Axure9中使用中继器实现单选效果

    本文主要告诉大家如何在Axure9中使用中继器实现列表的快速创建并且实现单选效果. 1.创建中继器 在空白页面中拖入中继器, 双击中继器,进入到中继器的编辑页面,状态如下: 创建布局,根据需要拖入需要 ...

最新文章

  1. maven package 知识(转载)
  2. Java oracle查询语句无法赋值给_java.sql.SQLException: 无法转换为内部表示 -〉java 查询oracle数据库返回错误信息...
  3. JAVA 两个简单的抽奖算法
  4. Linux Redhat5.7系统配置网易的yum源
  5. 【Spring学习笔记-MVC-17】Spring MVC之拦截器
  6. java ldap 父_java – DirContext:Active Directory Ldap请求:获取具有父组的用户组
  7. 色差仪软件的安装和电池充电
  8. 删除数组中的指定元素 | JavaScript
  9. 【珍藏】2020年AI、CV、NLP顶会最全时间表!
  10. Windows server 2008 R2桌面调出“计算机”等图标
  11. Unity 根据文件路径批量修改图片格式
  12. Android 签名类型
  13. zabbix 利用脚本发邮件(mail)
  14. 股票 - - 常用指标【下】
  15. mac 更新 nodenpm
  16. 深入浅出深度学习Pytroch
  17. python编写程序输出诗句_编程小白是这样用python把唐诗玩坏的
  18. 程序媛的2013总结以及2014展望
  19. Codeforces 85D Sum of Medians(线段树)
  20. DXperience皮肤设置 C#第三方控件学习笔记

热门文章

  1. 支持向量回归预测怎么做_财务预测模型怎么做?这些关键指标,你一定要知道...
  2. mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法
  3. 每日算法C语言1-求某整数
  4. c语言如何控制上位机界面大小,电机上位机控制及界面设计参考.doc
  5. MVC模式在Java Web应用程序中的实例分析
  6. 如何胜任一个小型公司的技术总监?我的感想
  7. SQL Server 中系统视图sysobjects中type字段的说明
  8. mysql 远程连接
  9. 两台电脑可以用同一IP上网吗?
  10. “天昌”的挽歌——逝去的背影(一)