【MFC】工具栏按钮的热点效果
00. 目录
文章目录
- 00. 目录
- 01. 案例概述
- 02. 开发环境
- 03. 关键技术
- 04. 程序设计
- 05. 秘笈心法
- 06. 源码下载
- 07. 附录
01. 案例概述
工具栏按钮的热点效果可以通过CreateEx方法来实现,在调用该方法创建工具栏之前还要创建两个图像列表,并为工具栏按钮和热点效果时的按钮关联不同图像列表的图像。效果如下图所示。
某个按钮被选中,其图标会改变。
02. 开发环境
系统环境:Windows 10
开发环境:Visual Studio 2019
03. 关键技术
实例需要使用两个图像列表,两个图像列表通过差异变化可以看出按钮的热点效果,在程序中创建两个列表,然后通过CToolBar
类的SetImageList
方法来设置显示按钮图标的图像列表,使用SetHotImageList
方法来设置产生热点效果的图像列表。
04. 程序设计
(1)创建基于对话框的应用程序。
(2)向工程中添加多个图标资源,ID属性分别从IDI_ICON1到IDI_ICON16。
(3)在CHotToolDlg类中定义一个CToolBarCtrl对象和两个CImageList对象。
private:CToolBar m_ToolBar;CImageList m_ImageList;CImageList m_HotImageList;
BOOL CMy4ToolButtonDlg::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: 在此添加额外的初始化代码//创建用来显示的图像列表m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//创建用来显示热点效果的图像列表m_HotImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//向图像列表中添加图标m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON1));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON3));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON5));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON7));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON9));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON11));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON13));m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON15));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON2));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON4));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON6));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON8));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON10));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON12));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON14));m_HotImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON16));UINT array[10];for (int i = 0; i < 9; i++){if (3 == i || 7 == i){//第4个 8个按钮为分隔条array[i] = ID_SEPARATOR;}else{array[i] = i * 2 + IDI_ICON1;}}m_ToolBar.CreateEx(this, TBSTYLE_FLAT);m_ToolBar.SetButtons(array, 10);//m_ToolBar.SetButtonText(0, TEXT("新建"));//m_ToolBar.SetButtonText(1, TEXT("打开"));//m_ToolBar.SetButtonText(2, TEXT("保存"));//m_ToolBar.SetButtonText(4, TEXT("剪切"));//m_ToolBar.SetButtonText(5, TEXT("复制"));//m_ToolBar.SetButtonText(6, TEXT("粘贴"));//m_ToolBar.SetButtonText(8, TEXT("打印"));//m_ToolBar.SetButtonText(9, TEXT("帮助"));//关联图像列表m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);m_ToolBar.GetToolBarCtrl().SetHotImageList(&m_HotImageList);//设置按钮和图标的大小m_ToolBar.SetSizes(CSize(40, 40), CSize(32, 32));//显示工具栏RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
05. 秘笈心法
热点效果的实现方法
实例使用了CToolBar类的SetHotImageList方法来实现热点效果,也可以通过处理鼠标移动消息(WM_MOUSEMOVE)来实现该效果,当鼠标移动到按钮上时,就使用SetButtonInfo来刷新图像,当然在鼠标移动前应当先记录工具栏按钮的区域信息。
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. 案例概述 Visual C++在 ...
- 【MFC】工具栏按钮追加显示文本
00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 工具栏中的按钮并不一定 ...
- 【MFC】CMenu实现菜单栏/工具栏、工具栏前勾选效果、菜单文本动态调整
[MFC]CMenu实现菜单栏/工具栏.工具栏前勾选效果.菜单文本动态调整 说明 菜单栏/工具栏的创建 添加菜单栏/工具栏 工具栏前勾选效果 菜单文本动态调整 其他 说明 主要介绍该如何加载菜单栏.工 ...
- VC MFC工具栏(CToolBar)控件
工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建, ...
- MFC 图片按钮的实现
1.CBitmapButton 方式实现 在MFC工具栏,添加按钮到界面,然后会修改按钮的属性,设置Owner draw为true; CBitmapButton只用于添加bmp位图,其他图片会有一些兼 ...
- qt 取消按钮点击效果_Qt实现自定义按钮的三态效果
Qt 实现自定义按钮的三态效果 好久之前做的一个小软件,好长时间没动过了,在不记 录下有些细节可能都忘了, 这里整理下部分功能的实现. 按 钮的三态,指的是普通态.鼠标的停留态.点击态,三态是 界面交 ...
- C#Windows7任务栏开发Thumbnail Toolbars(缩略图、工具栏按钮)
C#Windows7任务栏开发Thumbnail Toolbars(缩略图.工具栏按钮) 依旧是在扩展WMP播放器功能时所遇到的问题,我想要实现Windows7所带来的任务栏特性,直接看图. 以网易云 ...
- MFC工具栏资源及CToolBar类
MFC工具栏资源及CToolBar类: MFC工具栏: 一个工具栏是一个Windows控件,它允许用户通过点击一个按钮,而不是使用菜单执行窗体上的一些行动. 1.工具栏提供了一组方便的按钮,通过将最易 ...
最新文章
- 什么是标记符控制的分水岭算法
- freescale imx6 编译 linux ltib,TQIMX6Q技术分享——LTIB安装配置(转)
- Ubuntu Server 14.04 下root无法ssh登陆
- 第四届“传智杯”全国大学生IT技能大赛(决赛B组)【题解】
- 使用OLE方式获取数据库架构信息
- java list 转 map_Java8 快速实现List转map 、分组、过滤等操作
- ubuntu连接有线局域网后无法使用无线网卡上网
- 5部高分学科纪录片,在家也能受益良多!
- 推荐几个配色和图标网站
- 万向区块链首席经济学家:央行数字货币与狭义银行是不同层次的概念
- python scrapy框架基如何实现多线程_Python多线程爬图Scrapy框架爬图
- PHP 面试时常考的文件操作函数
- 书写「简历」时,需要规避的错误
- 2019-02-26-GCN介绍
- 用户登录项目第二期——HTML登录页面实现
- 基于MBOM的工艺数据管理及集成技术研究
- linux中的__setup的作用
- Android应用开发-小巫CSDN博客客户端总结篇
- numpy对数据集进行shuffle
- 百度JAVA一二三面面经(2019秋招深圳)
热门文章
- [转]在Winform(C#)中使用Flash控件
- java消息分发_Kafka教程设计思想之消息分发策略
- 电脑剪贴板在哪里打开_这个小玩意让手机的推送无缝显示在电脑上_办公软件...
- Java黑皮书课后题第2章:*2.8(当前时间)程序清单2-7给出了显示当前格林尼治时间的程序。修改这个程序,提示用户输入相对于GMT的时区偏移量,显示在这个特定时区的时间
- STL源码剖析---list
- 单词背诵【CodeVS3013】 哈希
- 虚拟机下CentOS7开启SSH连接
- RSA 公钥加密——私钥解密
- percona-toolkit 之 【pt-slave-delay】说明
- SmtpClient 身份验证失败(authentication failed) 的原因分析