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】工具栏按钮的热点效果相关推荐

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

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

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

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

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

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

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

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

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

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

  6. MFC 图片按钮的实现

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

  7. qt 取消按钮点击效果_Qt实现自定义按钮的三态效果

    Qt 实现自定义按钮的三态效果 好久之前做的一个小软件,好长时间没动过了,在不记 录下有些细节可能都忘了, 这里整理下部分功能的实现. 按 钮的三态,指的是普通态.鼠标的停留态.点击态,三态是 界面交 ...

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

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

  9. MFC工具栏资源及CToolBar类

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

最新文章

  1. 什么是标记符控制的分水岭算法
  2. freescale imx6 编译 linux ltib,TQIMX6Q技术分享——LTIB安装配置(转)
  3. Ubuntu Server 14.04 下root无法ssh登陆
  4. 第四届“传智杯”全国大学生IT技能大赛(决赛B组)【题解】
  5. 使用OLE方式获取数据库架构信息
  6. java list 转 map_Java8 快速实现List转map 、分组、过滤等操作
  7. ubuntu连接有线局域网后无法使用无线网卡上网
  8. 5部高分学科纪录片,在家也能受益良多!
  9. 推荐几个配色和图标网站
  10. 万向区块链首席经济学家:央行数字货币与狭义银行是不同层次的概念
  11. python scrapy框架基如何实现多线程_Python多线程爬图Scrapy框架爬图
  12. PHP 面试时常考的文件操作函数
  13. 书写「简历」时,需要规避的错误
  14. 2019-02-26-GCN介绍
  15. 用户登录项目第二期——HTML登录页面实现
  16. 基于MBOM的工艺数据管理及集成技术研究
  17. linux中的__setup的作用
  18. Android应用开发-小巫CSDN博客客户端总结篇
  19. numpy对数据集进行shuffle
  20. 百度JAVA一二三面面经(2019秋招深圳)

热门文章

  1. [转]在Winform(C#)中使用Flash控件
  2. java消息分发_Kafka教程设计思想之消息分发策略
  3. 电脑剪贴板在哪里打开_这个小玩意让手机的推送无缝显示在电脑上_办公软件...
  4. Java黑皮书课后题第2章:*2.8(当前时间)程序清单2-7给出了显示当前格林尼治时间的程序。修改这个程序,提示用户输入相对于GMT的时区偏移量,显示在这个特定时区的时间
  5. STL源码剖析---list
  6. 单词背诵【CodeVS3013】 哈希
  7. 虚拟机下CentOS7开启SSH连接
  8. RSA 公钥加密——私钥解密
  9. percona-toolkit 之 【pt-slave-delay】说明
  10. SmtpClient 身份验证失败(authentication failed) 的原因分析