MFC里的工具栏按钮图标如何使用外部图片?

news2024/10/7 8:32:06

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

工具栏按钮背景图片如何调用.ioc,.png图片?

如上问题有来自我自身项目开发,有的收集网站,有的来自读者,如有侵权,立马删除。

解决方案

  如下是上述问题的解决方案,仅供参考:

在MFC(Microsoft Foundation Classes)应用程序中,如果您想使用外部图片作为工具栏按钮的图标,通常需要将图片文件(如 .ico 或 .png)添加到资源文件中,然后创建工具栏按钮时引用这些资源。以下是详细步骤:

  1. 添加图片资源

    • 打开您的MFC项目。
    • 在“资源”选项卡中,找到“图像”文件夹,右键点击并选择“新建图像”。
    • 在弹出的对话框中,选择您的图片文件(.ico 或 .bmp),然后点击“打开”以添加到资源中。
  2. 创建工具栏

    • 如果您的项目中还没有工具栏,您需要创建一个。这通常在项目的初始化代码中完成,例如在 CMainFrame::OnCreate 函数中。
    • 使用 CToolBar 类创建工具栏,并添加按钮。
  3. 设置按钮图标

    • 在添加工具栏按钮时,您需要指定按钮的图标。这可以通过 CToolBar::AddBitmap 方法来实现,该方法允许您添加一个位图资源作为一组按钮的图标。
  4. 示例代码

    // 在CMainFrame的OnCreate或相应的初始化函数中
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY) ||
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
       TRACE0("未能创建工具栏\n");
       return -1;      // 失败
    }
    
    // 加载位图资源,这个位图资源需要包含多个图标
    if (!m_wndToolBar.AddBitmap(m_sizeToolBarImage))
    {
       TRACE0("未能添加位图\n");
       return -1; // 失败
    }
    
    // 为工具栏按钮设置图标索引
    m_wndToolBar.AddButtons(number_of_buttons, &buttons);
    
    // 调整工具栏按钮的布局
    m_wndToolBar.SetSizes(CSize(32, 32), CSize(24, 24));
    
  5. 使用PNG图片

    • 注意,MFC工具栏默认不支持PNG格式的图片。如果您希望使用PNG图片,您可能需要将PNG转换为ICO或BMP格式,然后按照上述步骤添加到资源中。
  6. 设置按钮样式

    • AddButtons 函数中,您可以为每个按钮指定样式,包括图标索引。图标索引对应于您在位图资源中定义的图标的位置。
  7. 编译并运行

    • 编译您的项目并运行,您应该能够看到工具栏上显示了您添加的图标。

请注意,上述步骤中提到的资源ID(如 IDR_MAINFRAME)和按钮结构(如 buttons)需要根据您的项目具体情况进行调整。如果您需要进一步的帮助或示例代码,请提供更多项目细节,以便我能提供更具体的指导。

  希望能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏「Bug调优」,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1710839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring和Servlet的整合

Servlet对象是谁创建的? 由服务器端创建的 程序启动调用加载spring配置文件代码 Web应用程序启动也需要加载Spring配置文件 Web开发中有三大组件: 1、servlet 2、filter 3、listener(request,session,application&…

语音控制系统的安全挑战与防御策略(上)

语音控制系统(VCS)提供了便捷的用户界面,涉及智能家居、自动驾驶汽车、智能客服等众多应用场景,已成为现代智能设备不可或缺的一部分。其市场规模预计到2023年达到70亿美元,这种扩张带来了重大的安全挑战,如…

【校园网网络维修】当前用户使用的IP与设备重定向地址中IP不一致,请重新认证

出现的网络问题:当前用户使用的IP与设备重定向地址中IP不一致,请重新认证 可能的原因: 把之前登录的网页收藏到浏览器,然后直接通过这个链接进行登录认证。可能是收藏网址导致的ip地址请求参数不一致。 解决方法: 方法…

LCD屏入门(基于ESP32)

主要参考资料: B站【乐鑫全球开发者大会】DevCon23 #17 |HMI 智能屏解决方案 目录 1.LCD屏幕硬件层2.LVGL驱动层 1.LCD屏幕硬件层 MCU常用的驱动接口在下面,大致可以划分为串口屏和并口屏。 串口屏相较于并行屏优势是占用IO少,相…

pcdn服务器应该怎么配?

要配置PCDN(Private Content Delivery Network)服务器,可以按照以下步骤进行: 需求分析:明确业务需求,确定所需的CDN功能和性能参数。这包括预期的流量、负载、内容类型、目标用户群体等。 硬件选择&#…

Xunsearch:实现拼音搜索和中文分词功能

首先我们需要安装xunsearch扩展库,参考 1、设置分词器和拼音搜索功能 在创建Xunsearch对象后,可以设置相应的分词器和拼音搜索功能。以下代码示例演示了如何设置分词器和拼音搜索功能: $index $xunsearch->index; $index->setToken…

[ue5]建模场景学习笔记(1)——混合材质

卷首:这部分会记录建模场景等相关学习内容,与ue引擎学习笔记不同的是,可能会略过一些基础内容,因为部分知识在blender中已经学习过了,不再继续记录。 1.需求分析: 想构建一个山地的场景,在ue5中…

10款AI工具,让工作生活学习更高效

我看大家都推荐的差不多了,常见好用的PC软件就那些,我不想反复“咀嚼”了,我想另辟蹊径推荐点不一样的,比如10款PC端的AI网站。AI已经全方位“侵入”我们的生活,从AI写作到AI绘画,从AI视频到AI语音&#xf…

详解makefile中addprefix

在 Makefile 中,$(addprefix prefix,names…) 是一个函数,用于将指定的前缀添加到一组空格分隔的文件名中。这个函数通常用于将相同的前缀添加到一组文件名或路径中,非常适合在 Makefile 中进行路径拼接操作。 语法: makefile C…

【小呆的力学笔记】连续介质力学的知识点回顾二:应变度量

文章目录 3. 格林应变与阿尔曼西应变 3. 格林应变与阿尔曼西应变 变形体在变形前的线元 O A → \overrightarrow{OA} OA ,在变形后变成 o a → \overrightarrow{oa} oa ,那么应变应该度量这种线元变形前后的差别。 ∣ o a → ∣ 2 − ∣ O A → ∣ 2 …

linux学习(六)

1.网络管理 (1)查看 ifconfig: root用户可以查看网卡状态, 普通用户: /sbin/ifconfig(需要加上命令的完整路径) (2)修改网络配置 通过命令修改网络配置 设置网卡的ip地址;禁用网卡和启用网卡了。 添加网关: (3)网络故障查询 ①ping 检测当前主机和目标主机是…

allure测试报告用例数和 pytest执行用例数不相同问题

我出现的奇怪问题: pytest执行了9条用例,但是测试报告确只显示3条用例 我将其中的一个代码删除后,发现allure测试报告又正常了 我觉得很奇怪这个代码只是删除了二维数组的第一列,我检查了半天都找不到问题,只有降低版本了。导致原因:allure-pytest版本使用的是最新版本,…

【Game】Powerful

文章目录 【小伙伴】隐藏小伙伴 【百趣集】【人物属性点】【宠物打造】【奇遇】【钓鱼】 【小伙伴】 刷新位置 小伙伴等级详情 克制关系 隐藏小伙伴 1、仙缘小伙伴(6种) 遇到仙缘驭宠师然后进入战斗抓取 107、七彩仙凤 108、小青兔 109、小布 110、黑腹蛛…

JAVA基础----线程池

①什么是线程池? 线程池是对所有线程进行统一的管理和控制,从而提高系统的运行效率。当我们要使用线程的时候可以直接从线程池中拿,用完也不用自己去销毁,省去创建和销毁的时间,提升系统的响应时间。 ②线程池的七大核…

linux安装srs

获取srs cd /opt git clone -b 4.0release https://gitee.com/ossrs/srs.git cd srs/trunk 启动srs ./objs/srs -c conf/srs.conf ./etc/init.d/srs status 访问http://192.168.220.146:8080/出现下方图片说明安装成功 点击进入SRS控制台看到下方图片

Java 中BigDecimal传到前端后精度丢失问题

1.用postman访问接口,返回的小数点精度正常 2.返回到页面里的,小数点丢失 3.解决办法,在字段上加注解 JsonFormat(shape JsonFormat.Shape.STRING) 或者 JsonSerialize(using ToStringSerializer.class) import com.fasterxml.jackson.a…

pelican,一个超强的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个超强的 Python 库 - pelican。 Github地址:https://github.com/getpelican/pelican 在当今数字化时代,博客已经成为个人和企业分享信息、展示成果的重要途径。静态网站…

【最优化方法】实验二 一维搜索方法的MATLAB实现

实验二  一维搜索方法的MATLAB实现 实验的目的和要求:通过本次实验应使学生掌握如何使用MATLAB软件进行一维搜索,并学会对具体问题进行分析。 实验内容: 1、0.618法的MATLAB实现 2、Fibonacci法的MATLAB实现 学…

Jetpack架构组件_1.基本知识

1.什么是Jetpack? Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。Jetpack 包含一系列 Android 库,它…

6-继承

6-继承 1、基本语法和方式2、继承的基本特点2.1 三种继承方式相同的基本点2.2 三种继承方式的差别2.3 公有继承的独有特点 3、子类的构造、析构3.1 子类的构造3.2 子类的析构3.3 子类的拷贝构造函数3.4 子类的拷贝赋值 4、多重继承4.1 内存布局4.2 类型转换4.3 名字冲突问题 5、…