【MFC】工具栏按钮单选效果
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】工具栏按钮单选效果相关推荐
- 【MFC】工具栏按钮多选效果本
00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 多选效果就是指工具栏按 ...
- 【MFC】工具栏按钮的热点效果
00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 工具栏按钮的热点效果可 ...
- 【MFC】工具栏按钮追加显示文本
00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 工具栏中的按钮并不一定 ...
- 【MFC】工具栏左侧双线效果
00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 由MFC向导创建的文档 ...
- MFC 图片按钮的实现
1.CBitmapButton 方式实现 在MFC工具栏,添加按钮到界面,然后会修改按钮的属性,设置Owner draw为true; CBitmapButton只用于添加bmp位图,其他图片会有一些兼 ...
- VC MFC工具栏(CToolBar)控件
工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建, ...
- Gridview 单选效果实现,且用且珍惜
Gridview 单选效果,在androidapp中实现非常频繁,我这里提供我的一种思路,这是我的思维导图: 怎么样将这样的思维导图翻译成java代码了,请看下面的代码了: // 电子产品的图片列表信 ...
- C#Windows7任务栏开发Thumbnail Toolbars(缩略图、工具栏按钮)
C#Windows7任务栏开发Thumbnail Toolbars(缩略图.工具栏按钮) 依旧是在扩展WMP播放器功能时所遇到的问题,我想要实现Windows7所带来的任务栏特性,直接看图. 以网易云 ...
- Axure9中使用中继器实现单选效果
本文主要告诉大家如何在Axure9中使用中继器实现列表的快速创建并且实现单选效果. 1.创建中继器 在空白页面中拖入中继器, 双击中继器,进入到中继器的编辑页面,状态如下: 创建布局,根据需要拖入需要 ...
最新文章
- maven package 知识(转载)
- Java oracle查询语句无法赋值给_java.sql.SQLException: 无法转换为内部表示 -〉java 查询oracle数据库返回错误信息...
- JAVA 两个简单的抽奖算法
- Linux Redhat5.7系统配置网易的yum源
- 【Spring学习笔记-MVC-17】Spring MVC之拦截器
- java ldap 父_java – DirContext:Active Directory Ldap请求:获取具有父组的用户组
- 色差仪软件的安装和电池充电
- 删除数组中的指定元素 | JavaScript
- 【珍藏】2020年AI、CV、NLP顶会最全时间表!
- Windows server 2008 R2桌面调出“计算机”等图标
- Unity 根据文件路径批量修改图片格式
- Android 签名类型
- zabbix 利用脚本发邮件(mail)
- 股票 - - 常用指标【下】
- mac 更新 nodenpm
- 深入浅出深度学习Pytroch
- python编写程序输出诗句_编程小白是这样用python把唐诗玩坏的
- 程序媛的2013总结以及2014展望
- Codeforces 85D Sum of Medians(线段树)
- DXperience皮肤设置 C#第三方控件学习笔记
热门文章
- 支持向量回归预测怎么做_财务预测模型怎么做?这些关键指标,你一定要知道...
- mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法
- 每日算法C语言1-求某整数
- c语言如何控制上位机界面大小,电机上位机控制及界面设计参考.doc
- MVC模式在Java Web应用程序中的实例分析
- 如何胜任一个小型公司的技术总监?我的感想
- SQL Server 中系统视图sysobjects中type字段的说明
- mysql 远程连接
- 两台电脑可以用同一IP上网吗?
- “天昌”的挽歌——逝去的背影(一)