大神,请问VS2010 MFC是如何实现 PNG格式透明背景的自绘按钮啊

大神,请问VS2010 MFC是如何实现 PNG格式透明背景的自绘按钮啊,第1张

MFC其实不支持PNG透明。

自绘的异形按钮,有多种做法,通常推荐使用CButtonST类或者皮肤库(界面库)实现。自己画也是可以的,方法也有多种。

用PNG做透明(异形)按钮,其实是利用GDI+对象,将图片导入为位图(BITMAP),在VS2010中,你可以使用CMFCButton类简单的实现透明效果(不过说实话,效果一般),这个方法网上有很多代码,比如:

http://blog.csdn.net/astraylinux/article/details/8184367

首先,你的按钮在创建是要支持位图,初始时可以在onpaint中设置背景图,如果要改变的话可使用CButton::SetBitmap来改变,记住,你这个变量一定要是全局的,或者是按钮类属性,不然的话会一闪而过的,看不到效果。

JPEG是一种图像压缩标准,很多精美的图片都是采用这种格式标准,其特点是文件体积较小,而且支持24位色深。但是,Windows9x只支持位图文件(即以bmp为扩展名的文件)的墙纸。下面这个程序就是将以jpg或jpeg为扩展名的图片文件转化为位图文件,并通过修改注册表的键值来通知Windows更换墙纸。本程序使用了一个Tform;一个OpenPictureDialog用来让用户选择图片;三个SpeedButton;分别用来打开OpenPictureDialog对话框,确定更换墙纸,退出程序。程序全部代码如下:unitUnit1interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,jpeg,registry,ExtDlgs,StdCtrls,ButtonstypeTForm1=class(TForm)SpeedButton1:TSpeedButtonSpeedButton2:TSpeedButtonSpeedButton3:TSpeedButtonOpenPictureDialog1:TOpenPictureDialogprocedureSpeedButton1Click(Sender:TObject)procedureSpeedButton2Click(Sender:TObject)procedureSpeedButton3Click(Sender:TObject)private{Privatedeclarations}public{Publicdeclarations}endvarForm1:TForm1implementation{$R*.DFM}procedureTForm1.SpeedButton1Click(Sender:TObject)beginopenpicturedialog1.execute{打开OpenPictureDialog对话框}endprocedureTForm1.SpeedButton2Click(Sender:TObject)varreg:tregistry{Tregistry对象在Registry单元中声明,需要在Uese中引用Registry单元}jpeg:tjpegimage{Tjpegimage对象在Jpeg单元中声明,需要在Uese中引用Jpeg单元}bmp:tbitmapbeginif(openpicturedialog1.filename=``)then{判断OpenPictureDialog1中有无文件被选中}messagedlg(`请选择一张图片`,mtinformation,[mbOK],0)elsebeginjpeg:=tjpegimage.Createjpeg.LoadFromFile(openpicturedialog1.filename){加载被用户选中的文件}bmp:=tbitmap.Createbmp.assign(jpeg)bmp.savetofile(`c:\windows\wall.bmp`){将转换成功的文件保存的路径及文件名}reg:=tregistry.Createreg.rootkey:=hkey_current_user{设置根键名称}reg.openkey(`controlpanel\desktop`,false){打开ControlPanel\Desktop路径对应的主键}reg.writestring(`tilewallpaper`,`0`)reg.writestring(`wallpaper`,`c:\windows\wall.bmp`){覆盖并写入新值TileWall-paper和Wallpaper串}systemparametersinfo(spi_setdeskwallpaper,0,nil,spif_sendchange){通知win-dows更换墙纸}reg.closekey{写入更改内容并关闭注册表}reg.Free{释放对象}closeendendprocedureTForm1.SpeedButton3Click(Sender:TObject)begincloseendend.此程序只能将以jpg或jpeg为扩展名的图片文件转化为Windows的墙纸,因此应在OpenPictureDialog控件的Filter属性中筛选显示文件的类型,最好设置为JPEGImageFile(*.jpg)和JPEGImageFile(*.jpeg)文件。程序在中文Windows98,Delphi4.0下编译通过


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11566784.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存