PNG透明背景按钮的实现(MFC)

MFC老项目界面翻新指南:用GDI+给按钮加上PNG透明图标和悬停效果 本文详细介绍了如何使用GDI+技术对MFC老项目进行界面现代化改造,重点实现PNG透明图标和悬停效果。通过创建自定义按钮控件类,开发者可以低成本地为传统MFC应用添加现代化UI元素,同时保持高兼容性和低代码侵入性。文章包含完整的代码示例和性能优化建议,帮助开发者高效完成界面翻新。 阅读详情

学技术怎么能不会用服务器,阿里云服务器现8折优惠,还有更多优惠券限量发放
https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=7czske1k&utm_source=7czske1k

问题描述:

当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png"

开发环境为VS2010。

解决办法:

使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton::SetImage完成按钮背景图片设置。


@1.引入GDI+库

由于是按钮上使用的是PNG图,第一步是将PNG图装载进来,这一步建议使用GDI+库,关于GDI+库的引入,请参看http://blog.youkuaiyun.com/cashey1991/article/details/7407425,其中有详尽描述)

@2.对话框中添加Bitmap成员变量作为按钮背景图的图片对象,假设变量名为m_Bg1, m_Bg2

@4.在构造函数中添加m_Bg1, m_Bg2的初始化代码

[cpp]  view plain copy
  1. CMainDlg::CMainDlg(CWnd* pParent /*=NULL*/)  
  2.     : CDialogEx(CMainDlg::IDD, pParent),  
  3.     m_Bg1(L"bg1.png"), mBg2(L"bg2.png")  
  4. {  
  5.     ....  
  6. }  

@3.在工具箱中选择MFC Button Control,在对话框中进行添加,假设ID号为IDC_BTN_PNGBUTTON

@4.设置添加的MFC Button Control的Style为无边框,Visible为True,Transparent为True,Image Type为无

@5.在对话框的OnInitDialog()函数中添加代码:

[cpp]  view plain copy
  1. BOOL CMainDlg::OnInitDialog()  
  2. {  
  3.     CDialogEx::OnInitDialog();  
  4.     ....  
  5.   
  6.     CMFCButton *pMfcButton = (CMFCButton *)GetDlgItem(IDC_BTN_PNGBUTTON);  
  7.   
  8.     HBITMAP hBmp, hBmpHot;  
  9.     m_Bg1.GetHBITMAP(NULL, &hBmp);  
  10.     m_Bg2.GetHBITMAP(NULL, &hBmpHot);  
  11.     pMfcButton->SetImage(hBmp, TRUE, hBmpHot);  
  12.     pMfcButton->m_bTransparent = TRUE;    // 设置按钮为透明的  

编译程序即可查看到已经实现了PNG透明按钮效果

[MFC] 手动美化 MFC 窗体 去除边框 1.把窗口边框改成无边框: 但只这样做会导致无法拖动窗口。 2.在类向导中添加这个消息:OnHcHitTest 3.修改这个消息处理函数的返回值为:HTCAPTION 添加背景图片 1.准备一张 ... 阅读详情

相关推荐

告别默认丑界面:手把手教你用MFC打造无边框+PNG按钮的现代化桌面应用

本文详细介绍了如何通过MFC框架实现无边框窗口和PNG按钮的现代化桌面应用界面改造。从去除默认边框到高级背景处理技术,再到PNG按钮的完整实现,手把手教你将复古的MFC应用升级为符合当代设计趋势的精致界面,显著提升用户体验和视觉吸引力。

weixin_30565327的博客 409

MFC自绘控件系列-按钮PNG贴图(GDI+)

常规的GDI自绘控件仅支持BMP图片,不支持png图片。png图片体积小,支持透明色,可以做圆角界面。自绘控件想要支持PNG图片,需要在MFC工程引入GDI+。

u013705518的博客 1930

使用GDI+创建自定义PNG背景按钮类

本文还有配套的精品资源,点击获取 简介:GDI+是一个扩展了传统GDI功能的图形库,支持更复杂的图形绘制和图像处理。在本教程中,我们将学习如何利用GDI+实现一个具有PNG图片背景的自定义按钮控件。通过继承MFC中的 CButton 类,我们将创建 CGdipButton 类,并在其中实现加载PNG图像、处理按钮绘制和鼠标事件等功能,为Windo...

weixin_33670640的博客 1751

MFC利用png实现透明按钮,可以直接加载PNG文件或先包含到程序资源中再加载。按钮的高亮与灰度图像都是自动生成。

在此示例中,我将ID设置为IDC_PLAY,并将变量名称设置为m_cPlay。在资源编辑器中,从res文件夹导入.png文件,并将资源类型设置为PNG。右键单击IDR_PNG1,选择属性,并将其重命名为有用的东西,IDR_PNG1IDR_PLAY在此示例中。使用资源编辑器在对话框中添加一个按钮,设置资源ID,然后在Caption框中删除文本。MFC利用GdipButton实现png透明按钮,并增加了直接加载PNG文件用作按钮图像,而不是之前须先包含到程序资源中再加载。第3步. 在程序启动时初始化 gdi+

gmajvfhp的专栏 870

mfc实现自给按钮,透明按钮

如果你希望能够在自己的程序中表现出新意,那么你一定不会仅仅满足于MFC提供那些标准控件。这时,我们就必须自己另外多做些工作了。就改变控件外观这一点来说,主要是利用控件的自绘功能(Owner Draw)实现的。

MFC 自绘按钮显示 PNG 图片

本实例继承 CButton 实现一个自绘按钮的控件,可以显示 PNG 图片,需要依赖 GDI+ 库。

MFC的PNG图片按钮

MFC的PNG图片按钮 #pragma once #include "afxwin.h" ///////////////////////////////////////////////////////////////////// // 工程: YF_GCM -> ButtonDemo // 作者: ** // 描述: 自绘制位图按钮 // 主要函数: // Set...

5474

VC/MFC 基于对话框 按钮加载PNG图片

VC/MFC 对话框 按钮加载PNG图片 透明

PNG透明背景按钮的实现(MFC)

问题描述: 当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png" 开发环境为VS2010。 解决办法: 使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton::Set

Woosa 2781

MFC 自绘按钮 集合 (加载png图片 无规则 xp 动感效果)

MFC 自绘按钮 集合 (加载png图片 无规则 xp 动感效果) 这是我初学时期的收集并修改的代码 现在贡献出来啦

PNGButton VC制作PNG透明按钮类文件

摘要:VC/C++源码,界面编程,PNGButton  PNGButton是一个使用VC制作PNG透明按钮所需的类文件,PNGButton.cpp和PNGButton.h,制作此类按钮常用到的一个类文件。

用MFC做漂亮界面之美化按钮(PNG透明贴图)

转自:https://blog.youkuaiyun.com/u011711997/article/details/52551106 上次我们学习了如何美化对话框的界面,这次我们为上次的对话框添加两个按钮,一个是关闭按钮,另一个是最小化按钮,好,现在我们先看一下效果: 是不是很难看,因为我们的对话框美化了,所以我们的按钮也要美化,因为采用贴图的方式来美化,所以,我先给出这两个按钮的PNG格式的图片,该图片支...

networmrlc的博客 1169

别再为调试发愁!STM32CubeMX+FreeRTOS下,串口printf打印的保姆级配置指南(基于STM32F429)

本文详细介绍了在STM32CubeMX和FreeRTOS环境下实现稳定串口printf打印的配置方法。通过硬件选型、基础配置、线程安全的重定向实现以及高级调试技巧,帮助开发者解决多任务环境下的串口输出问题,提升调试效率。特别适用于STM32F429开发板用户。

weixin_42527401的博客 273

texturebrush 平铺渲染_用C++实现半透明按钮控件(PNG,GDI+)

使用MFC实现上面的按钮半透明效果能看到父窗口中的内容,上面是效果图(一个是带背景图片的、另一个是不带的)。控件继承自CWnd类(彩色的部分是窗口的背景图片、按钮是PNG图片,第二个图标是鼠标指向时的效果)。图标的绘制使用GDI+绘制PNG图片,在此不多说了(处理WM_PAINT消息): 1 void PNGButton::OnPaint()2 {3 CPaintDC dc(this);4 ...

weixin_39911916的博客 372

不用Root也能抓包?Android高版本HTTPS抓包的3种替代方案(含Charles技巧)

本文针对Android高版本HTTPS抓包难题,提供了三种无需Root权限的实战解决方案:利用VirtualXposed等虚拟沙盒环境、配置Postern等系统级代理工具,以及通过修改应用源码或网络安全配置。文章还详细解析了Charles抓包工具在非Root环境下的高级配置与排错技巧,帮助开发者在遵守安全规范的前提下,有效进行网络调试与监控。

http9protocoller的博客 648

单细胞专题(1) | 单细胞转录组研究样本准备指南(上)

单细胞RNA测序(scRNA-seq)是目前最前沿,能进行大规模实验的转录组研究技术,为理解细胞组成和动态生物学过程提供了很多新的见解。单细胞研究已经为我们理解发育过程,老化和疾病(如癌症)等提供了大量数据。在这里,小编主要就前期的样本准备与保存需注意问题给大家进行讲解,以备大家在不同的研究场景和研究背景下,走好单细胞转录组学研究的第一步。

bioyigene的博客 4232

cximage+png图片处理(中)

接着昨天晚上的东西做。我们做了如何添加一个背景到对话框上,再来看一下这个效果,昨天晚上因为网不好,而已又着急。所以今天晚上来我换一张大的图片,来看一下效果。 因为我的这个图片是800*600的在窗口初始化的时候,我要设置下窗口的大小。 看到效果了吧,很好是不 是,比你们用gdi+jpg,是不是容易的很呀! 现在我们来往按钮上贴张图,看一下效果,因为是png图。你需要用你的ps来处理一下你的图

有什么不努力的理由呢? 5213

yolov5深度剖析+源码debug级讲解系列(一) yolov5的架构和源码debug准备

前言 前段时间分析了yolov3的源码,这次想带着小伙伴一起把yolov5完全掌握。博主还是保持着一贯的风格,依旧采用debug级别的源码剖析。目的就是让大家可以通过一个系列的文章就把yolov5的架构、设计理念和每一行源码都弄懂。只要小伙伴可以花时间把这个系列读完,就会对yolov5的理解有所提升。 去年参加了kaggle的小麦检测比赛,yolov5在比赛的中段开始呈现霸榜趋势,超越了efficientdet。虽然最后yolov5因为权限等某些问题被kaggle官方禁用了,但是仍然体现出了其强大的能力。值

人唯优的博客 4万+

用C++实现半透明按钮控件(PNG,GDI+)

使用MFC实现上面的按钮半透明效果能看到父窗口中的内容,上面是效果图(一个是带背景图片的、另一个是不带的)。 控件继承自CWnd类(彩色的部分是窗口的背景图片、按钮是PNG图片,第二个图标是鼠标指向时的效果)。 图标的绘制使用GDI+绘制PNG图片,在此不多说了(处理WM_PAINT消息): 1 void PNGButton::OnPai...

weixin_30363509的博客 217

大模型-internvl高通qnn运行源码解读

模型链接:https://huggingface.co/OpenGVLab/InternVL2-2B论文官方简要说明 https://internvl.github.io/blog/2024-07-02-InternVL-2.0中文解读 https://zhuanlan.zhihu.com/p/702946079在线demo https://internvl.opengvlab.com/

点滴的岁月 1833

YOLOv11的元学习(MAML)few-shot适配-(5样本内快速适应新类别)

本文提出了一种基于元学习和YOLOv11的少样本目标检测方法。首先介绍了元学习的核心概念和MAML算法原理,分析了YOLOv11的架构改进及其在少样本检测中的适用性。针对少样本检测面临的过拟合、特征混淆和定位困难等挑战,提出了基于MAML的解决方案。在实现方面,详细阐述了环境配置、数据预处理和任务采样策略,构建了支持N-way K-shot任务的数据加载器。实验表明,该方法相比传统微调策略可显著提升小样本场景下的检测性能。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 602
上一篇: 任何一个正整数都可以用2的幂次方表示,转化
下一篇: GDI入门实例(在VC++6.0中将JPG格式图片转换成BMP格式)
AstrayLinux
博客等级 码龄15年 55粉丝 38原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值