PNG透明窗体攻略(控件不透明)vc++程序指导.docVIP

PNG透明窗体攻略(控件不透明)vc++程序指导.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PNG透明窗体攻略(控件不透明)vc程序指导

这两天在研究透明窗体,总算略有小成。网上大部分文章都是介绍到把窗体弄透明就没有下文。其实窗体透明并不难,难就难在透明的窗体上还要放控件。今 天我就把窗体透明一直到控件不透明怎么制作一块给写了吧。先截张图诱惑下你们,如果你没兴趣就没必要再看下文了,有兴趣的话就继续往下看吧^_^! ?? ?看好了,这是XP系统,未装.net。我的Photoshop学的不太好,把玻璃片弄的太透了些,如果你们有好的美术,再加上这种技术,肯定会如 鱼得水。下面就来详细说说它的制作过程吧: ???? 第 一步:在VC6中使用GDI+:你得从网上弄个GDI+ for XP的库,大约500K。如果找不到的话,找我QQ要吧,我会把这个窗口的源程序一起发给你的。把它解压后,将所有文件还包括子目录中的文件复制到你的项 目目录。在stdafx.h中加入以下代码: #include gdiplus.h ////请修改为你的头文件路径 using namespace Gdiplus; #pragma comment(lib, gdiplus.lib) ////请修改为你的.lib文件路径 ???? 我的项目名为Test,所以在TestApp中加入全局变量 ULONG_PTR gdiplusToken; ???? 在BOOL CTestApp::InitInstance()中加入这两行: GdiplusStartupInput gdiplusStartupInput; GdiplusStartup(gdiplusToken, gdiplusStartupInput, NULL); ???? 记住在线程退出后要御掉GDI+,它很占资源的,在int CTestApp::ExitInstance() 中加入这行: GdiplusShutdown(gdiplusToken); ???? 一切准备工作就绪,开始制作窗口了。 ???? 二、制作PNG图像:这不是程序员的事,是美工的事,可是目前美术技术都是我一人,所以干脆连PNG一起教你们做了吧。 ???? 先打开Photoshop(简称PS),打开一张背景图,在背景图上使用圆角矩形工具?画个矩型,再用图层样式调出如下绿色玻璃片: ? ?什么?怎么个调出来的?你还真以为我什么都教你?要是我连PS的过程都写上来,那我干脆写本书得了。体谅一下吧,写教程是需要大量时间的,所以能 省则省。 ???? 将背景去掉,将玻璃保存成PNG图片,不需要设置任何参数,PNG是自动使用这种与背景溶合透明的,强大吧^_^! ?再用同样的方法,制作绿色按钮?,记住做界面的时候,一般要使用一种主色调,在这里我随便用了下绿色作为主色调,现在网络流行的是蓝色。文字则不能用RGB色彩,这样用户容易产生视觉疲 劳。我做这个界面只是想试试绿玻璃好不好看,结果觉得不怎么好看,以后有空再弄个蓝玻璃试试吧。 ???? 按钮不需要保存成PNG,因为我不准备将它透明。至于这种“透明控件”的文章,你在网上一搜一大堆。 ???? 继续吧!还要做其它3个按钮,“确定”的按下效果,“取消”的拾起和按下效果,在这里我就不截图了。 ???? 美术都搞定,开始写代码。 ???? 三、写代码之前,我先说说工序:先用SetWindowLong将对话框设置成层级窗体,再使用GDI+显示图片。显示成功后再用 UpdateLayeredWindow函数进行透明处理。 ???? 现在问题出来了,你会发现你原来在窗口上画的控件一概不显示,怎么办呢?我是在这个窗口上再盖上另一个对话框,设置成启动窗体那种样式,所有消息 都在这个前景窗体上处理。 ???? 问题又来了,前景窗体盖上去,后面窗口又看不见了,怎么办呢?我又想了办法,在前景窗体加了透明色,在这里我是用粉红色,因为在电脑中粉红色用的 最少,因为它很刺眼。用这个方法的缺点就是你的控件不能有粉红色。 ???? 最后将两个按钮改成位图按钮即可。 ???? 现在来看详细制作过程吧: ???? 定义成员变量:在TestDlg.h中定义 BLENDFUNCTION m_Blend; HDC m_hdcMemory; ???? 改成层级窗体:在BOOL CTestDlg::OnInitDialog()函数中加入如下代码: //窗体样式为0x80000为层级窗体 DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE); SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000); ???? 加载PNG图片: //绘制内存位图 HDC hdcTemp=GetDC()-m_hDC; m_hdcMemory=CreateC

文档评论(0)

yuerang3062 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档