说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

透明控件的实现方法

HTML文档下载 WORD文档下载 PDF文档下载
在界面开发中,你需要实现一些炫的效果,你经常会遇到使控件透明方面的问题。在本文中我提供了一个实现透明控件的方法。源代码包含基于Win32 API的类CTransparentHelper,可以在MFC,ATL,WTL,Win32应用程序中或其它框架下使用。
介绍
在界面开发中,你需要实现一些炫的效果,你经常会遇到使控件透明方面的问题。在本文中
我提供了一个实现透明控件的方法。源代码包含基于Win32 API的类CTransparentHelper,
可以在MFC,ATL,WTL,Win32应用程序中或其它框架下使用。如果你有好的意见、BUG、问题
请发邮件给我,我会更新版本。你也可以访问我的技术博客 http://blog.uieasy.com/

下载源代码

介绍

在界面开发中,你需要实现一些炫的效果,你经常会遇到使控件透明方面的问题。在本文中

我提供了一个实现透明控件的方法。源代码包含基于Win32 API的类CTransparentHelper,

可以在MFC,ATL,WTL,Win32应用程序中或其它框架下使用。如果你有好的意见、BUG、问题

请发邮件给我,我会更新版本。你也可以访问我的技术博客 http://blog.uieasy.com/

 

背景

我写这个代码是因为我需要一些透明的控件,如:按钮、滑动控件、进度条等。

我发现当父窗口或控件移动时一些效果无效;当你在可改变大小的对话框中使用透明控件这将是一个问题。因此,我写了CTransparentHelper来解决。当MoveWindow调用后会有一个平滑的透明效果。

 

特点

1.没有依赖其它框架

2.能在不同类型的控件中使用

3.能在多层透明中使用

4.代码易用

 

使用代码

在介绍如何使用源代码前,我建议用内存DC存储父对话框的背景DC。这样使子控件的透明比如容易实现也提高了绘图效率。更多内容,请参考源代码。

 

包含 "TransparentHelper.h"

在需要透明显示的控件文件中 #include "TransparentHelper.h"

然后添加一个CTransparentHelper类型的对象.

#pragma once#include"TransparentHelper.h"// CSliderCtrlExclass CSliderCtrlEx : public CSliderCtrl{   .........   CTransparentHelper m_objTrans;}
初始化CTransparentHelper对象
void CSliderCtrlEx::PreSubclassWindow(){   // TODO: Add your specialized code here and/or call the base class   .......   CSliderCtrl::PreSubclassWindow();   m_objTrans.Install( GetSafeHwnd());   ......}
 在需要的时候调用 CTransparentHelper的TransparentBk函数
 
BOOL CSliderCtrlEx::OnSliderDrawChannel( CDC* pDC,   CRect& rect, UINT nState){   ......   if ( m_objTrans.IsValid() )   {      m_objTrans.TransparentBk( pDC->GetSafeHdc(), GetSafeHwnd());   }   .........   return TRUE;}
在控件的父窗口中添加代码
有时,父窗口是一个对话框,我需要处理WM_TRANSPARENT_BK消息,该消息从透明控件发送,目的是恢复DC。

LRESULT CTransparentControlDlg::OnTransaprentBk( WPARAM wParam,                                                 LPARAM lParam){   HDC hdc = ( HDC)wParam;   HWND hwnd = ( HWND)lParam;   CTransparentHelper::OnTranparentControl( m_pMemDC->GetSafeHdc(),                                           (WPARAM)hdc, (LPARAM)hwnd);   return TRUE;}
注:m_pMemDC是对话框的内存DC,当对话框尺寸变化时,m_pMemDC将会被改变。

背景更改时通知子控件
当对话框的内存DC更改,它必须所有透明的子控件。
void CTransparentControlDlg::BuildBkDC(){   //rebuild the background dc   ........   //when the parent dialog's background is rebuilt,   //notify the child which has an transparent tag.   CTransparentHelper::NotifyTransparentChild( GetSafeHwnd());}
WM_NOTIFY_TRANSPARENT消息
透明控件需要处理 WM_NOTIFY_TRANSPARENT消息,当背景改变,父窗口将发送该消息。
注:对于一些使用某些绘图函数的控件(例如:NM_CUSTOMDRAW),Invalidate不会导致真正的重绘。
因此,我添加 WM_NOTIFY_TRANSPARENT消息使其兼容。如果透明控件在调用Invalidate后能够自己
重绘则不需要处理该消息。
LRESULT CSliderCtrlEx::OnNotifyTransparent( WPARAM wParam,                                            LPARAM lParam){   if ( ::IsWindowEnabled( GetSafeHwnd()))   {      ::EnableWindow( GetSafeHwnd(),FALSE);      ::EnableWindow( GetSafeHwnd(),TRUE);   }   else   {      ::EnableWindow( GetSafeHwnd(),TRUE);      ::EnableWindow( GetSafeHwnd(),FALSE);   }   //This operation is for the repaint of slider control,   //because Invalidate can't bring the NM_CUSTOMDRAW message.   //M..., this may not the best method to solve the problem.   //If you have another method, please tell me.   return TRUE;}
关于作者
拥有8年软件架构开发经验,擅长用C++进行WINDOWS应用开发。
Android游戏开发之旅五 Path和Typeface Android游戏开发之旅四 Canvas和Paint实例 Android游戏开发之旅三 View类详解 Android游戏开发之旅二 View和SurfaceView Android游戏开发之旅一 长按Button原理 Android程序内存管理必读 Android按键事件映射表和转义符对照 Android Intent大全更新到API Level8 Android中Intent对应的category列表大全 Android中内嵌字体实现个性化 TextView多行本文滚动轻松实现 获取和设置ListView的选择项 EditText中显示隐藏Android输入法窗口 自定义ListView行间的分割线 Android程序完全退出的三种方法 WebView使用技巧和介绍 EditText仅允许特定类型数据输入 自定义Android应用的访问权限 android.text.format文件大小和日期解析类 Android Rootkit相关揭秘 androidmanifest.xml高级属性解析 根据packageName构造Context SQLite操作,还是raw方法更简洁高效 Android开发基础YesNo对话框构造代码 Android代码性能优化技巧 Android开发注意点 Part One onSaveInstanceState和onRestoreInstanceState的用处 Android基础概念Context的作用 在Android的Notification中显示进度条 Android跨进程数据通讯-剪切板Clipboard ConditionVariable Android线程同步 高分请教高手!简单,看了你也是高手 代码编辑器的问题。 计论:大家都用什么工具进行数据库的比较? 我高中的班主任 请大家评评理,特别是JAVA版版主! 这样的SQL语句怎么写啊 form切换!VB.net里面如何在语句里调出别的FORM 如何用ADO连接EXCEL数据? 什么是上溯造型? 如何把console.write 输出很多内容保存到文件?thread.join()如何使用? 我想实现像网络蚂蚁那样在IE上点右键,把这个IE中的信息传送给我主程序,现在遇到两个问题! 控件的布局问题? 实例化算不算继承? 急!!!!关于SQL数据堵塞 请大家推荐一下哪个汇编集成环境比较好用?DOS下用什么?WIN下用什么? 向各位请教两个tomcat的问题:(谢谢) 高手请问 拉格朗日算法VB=>BCB 求ASP的字符串比较函数. 找C++BUILDER高手!! 我在做演示光盘,用camtasia录制的屏幕图象,可是在客户的机器上播放不出来,在线等待,解决问题马上揭贴! fastreport如何不进行预览而直接打印! 不使用下拉数据窗口,如何实现输入产品代码即可显示产品名称 大哥救命啊 一个简单问题,在一个Win32 applicaion 中如何使用CString变量! 在线等待! 倒霉!!!平白无故被副总扣了100点! 我高中的班主任 JBuilder的爱好者,请留下您的联系方式!谢谢,让我们共同进步! 未指定默认数据库驱动…… VC中如何添加数据库支持? 栽ejb-jar.xml中部署的Ejb QL怎么和Home接口中声明的查询连接起来,必须以ejbSelect开头吗? 如何通过程序调用荧光笔操作?急,在线等!高分相送啊! 表格宽度 发现我的作文水平如果参加今年高考能得满分(仅限作文) 送100分,JB7+JBoss下,用CMP方式建两个EntityBean,比如DIfsZxx(主键所在实体),DIfsZxxRw(外建所在实体),当两者之间关系设为。。。。 谁能够告诉我所有ACCESS数据类型的英文名字?偶在VB中有用到! 请问如何才能使用asp连接foxpro数据库,使用oledb 启动出现找不到windows\system\service.vbs怎么回事??但进入系统正常,如何去掉??? Datagrid!!! 大家能不能推荐一个免费个人主页啊。 大家来帮我看看PHP连接ACCESS数据库的问题! 大家讨论一下这种软件的开发机制和速度优化机制,有没有可能进入代理内部? 放分拉,关于struts的问题,如何在action类中调用ApplicationResources.properties中的信息!!进者有分!! 如何基于对话框打印表格(比如个人简历)在线给分! 今天刚装了新的内核,所以写出过程供大家参考! 一个急需要解决的问题??? VC下如何接收COM+事件 妈妈,女儿对不起你 jbuilder乱码,在线求解 请教一个有难度的代码,江湖救急啊! 在线等!!! 编写一个短信中心,必须要向服务商拿哪些参数? 简单问题:关于ModifyStyle 拖字怎样换偏旁 如图,正方形ABCD的边长为8,点M在DC上,且DM=2,N是AC上的一动点,则DN+MN的最小值为多少?图片看不清的话点击放大. 时间的流逝速度的单位是什么相对论里说物体运动速度接近光速,时间流逝会变慢,但快慢是形容速度的.用于时间不是说时间的速度变慢了吗.但是时间速度的单位又是什么,不能是普通的速度 eight eges.wang! “思”字和“宜”字可以加哪些偏旁 宇宙中的时间流逝快慢的似乎悖论根据爱因斯坦的广义相对论,当物体以运动的速度越快,衡量其自身的时间就相对流逝得越慢,像极限逼近,也就是说,当物体越接近光速,其时间就会趋近于停止. 求助英语练习题(标题字数不够)第一个:the country life the old man was used to ( )a lot since 2008A,change B,has change C,changing D,changed第二个:(  )this method does not work ,let`s try another.A,though B,until C,bef 1份报纸批发价1.35元,零售价1.5元,张大爷想通过卖报赚到50元,他至少要卖多少份报纸? 时间的流逝事实上是均匀的吗?为什么心理状态会“改变”时间的快慢? 余与芸寄届……此真乡居之良法也的文言文解释 怎么标注拼音中的阴平、阳平、上声、去声? 一种报纸,批发价4.55元,零售价5.50元.张大爷一个月卖着种报,赚了95元.请问,这个月,张大爷卖了多少卷子上的题,已经考过了, 军加偏旁可以组成什么字 尘字换偏旁再组词 一份报纸的批发价是0.25元,零售价是0.5元,叔叔卖报想赚到50元,他至少要卖多少份报纸? 用奇峰异岭造句 一份报纸的批发价是2.35元,零售价是2.5元.小明在星期天卖报赚了30元钱,他卖了多少份报纸? 英语单词(动词)变形时什么时候加ed,什么时候双写加ed?limit 也元音和辅音结尾 ,为什么直接加ed就行了? 奇峰异岭的造句 白银盘里一青螺这句诗形象地写出了望洞庭什么 百度知道 第23题,帮我解决,急 奎,拼音 初一数学评价手册P25第5题帮我 kkkkk 361°的含义nongbuqingchu “奎” 怎么读?请给我拼音,D 黑洞是恒星演化的最后阶段,根据有关理论,当一颗恒星衰老时,其中心的燃料(氢)己经被耗尽,在外壳的重压之下,核心开始坍缩,直到最后形成体积小、密度大的星体.如果这一星体的质量超过 不是361°那个. 奎这个拼音叫什么字 1.计算:-6AB*[AB的平方-6A的3次方B]=[ ]2.观察下列各式:1.5的平方-1=4[2*1+4],2.6的平方-4=4[2*2+4] 3.7的平方-9=4[2*3+4] 4.8的平方-16=4[2*4+4],...将你观察到的规律用含有字母N的等式表示应是[ ]其中N为整数.3. 361°是什么意思 求各位数学高手,算出阴影部分面积,步骤详细 英语翻译一定要全!1 A与B成反比例,B与C也成反比例,那么A与C成( )比例 若a、b、c、d都是实数,求证:(a2+b2)(c3+d2)大于等于(ac+bd)2 尘字能换什么偏旁再组词 两个字请教:宝盖头下面一个契;天涯的涯去掉三点水. xing ( )高 看拼音写汉字 尘怎么组词 361°是什么意思 气象万千、风云变幻、奇峰异岭、若隐若现、腾云驾雾、飘飘欲仙、白云苍狗、瞬息万变 的意思 宋书 列传第三十一王僧绰,琅邪临沂人,左光禄大夫昙首子也.幼有大成之度,弱年众以国器许之.好学有理思,练悉朝典.年十三,太祖引见,下拜便流涕哽咽,上亦悲不自胜.袭封豫章县侯,尚太祖长女 选项 A 成正比例 B 成反比例 C 不成比例如果X和Y互为倒数,那么X和Y( ).平行四边形面积一定,它的底和高( ).圆锥的底面积一定,高和体积( ).分子一定,分母与分数值( ).7:X=5:Y,X与Y( 有什么英文单词发“wang”和“xing”这个音的?或是组合起来的,本人起英文名字哦.. 三条直线ax+2y+8=0,4x+3y=10,2x-y=10,能围成一个三角形,a的取值范围? 谁有动物卫生监督执法群,我要加入? 气象万千,风云变幻,奇峰异岭,若隐若现,腾云驾雾,飘飘欲仙,白云苍狗,瞬息万变,选其中的两三个词语写一段话. 1份报纸批发价1.35元,零售价1.5元,张大爷星期天卖里30元,他卖多少份报纸? 隋文帝措施对历史进程影响最大的是 请英语高手帮我取两个英文名?wang xing,最好和中文有斜音,然后中文意思像男孩子,好读! 为了巩固新生的苏维埃政权,苏维埃政府在对外关系上采取了什么措施 隋文帝治理的措施 名字带奎字什么意思 在课文 把铁路修道拉萨去 中巍峨一词怎样解释 隋文帝统治时期史称000 “奎”字的意思?是不是可以是皇帝的意思. 思加什么偏旁组成什么字 隋文帝统治时期,经济繁荣,史称___? a.b为不等正实数,a方-b方=a立方-b立方证a+b大于1相当相当难 如图,正方形ABCD中,点E在边AB上,EC交BD于点M,过M作MF⊥EC交AD于F点,M为垂足,且AE=nEB,问若n=2时,则AF/FD=?图: 时间的流逝速度与什么有关? 一名越南籍变性人涉嫌贩毒被马来西亚警普京称索契冬奥会欢迎任何性取向的人参法国女婴在后备箱被发现 躺在排泄物中法国女婴在后备箱被发现 躺在排泄物中澳大利亚维州采取强硬措施整治司机开车日本明仁天皇夫妇将首次访印 前首相森执政联盟候选人赢得格鲁吉亚总统选举美被曝一月内监听西班牙超6000万个纽约华裔社区灭门案震惊美国 凶手提审迪拜将推出专供叫车服务出租车迪拜将推出专供叫车服务出租车土耳其青睐中国防控系统向西方国家扇了日本诺贝尔医学奖得主为募资发薪水跑马穆兄会领导人将首次在埃及受审 原定于为表彰军犬贡献 美军方为军犬设国家纪日本一男子摔死1岁女儿 只因其哭闹不德国男子以点燃自家公寓要胁 欲与市长英国男子涉嫌窃取美机密 自称能“搞死全球首次大规模男性裸体展 法国美术展英国国家打击犯罪局欲聘400名赛博情卫计委回应放开单独生二胎新闻:政策无新密:检察官宣誓迎接“国家宪法日”新疆呼图壁镇九社区州级文明单位零基创执法“微创新”万不可“破格执法”再曝古墓盗窃案:盗掘西周古墓 逃亡一福建地震局官员被曝“长期婚外情”后已深圳两年来查处街道“一把手”12人黑龙江一财务干部坠亡 当地回应情况属官方证实黑龙江大兴安岭一名官员坠亡云南临沧市两名干部违纪被连降两级宁夏一县委书记受贿案开审 被控受贿4“猎狐2014”行动新疆抓获劝返经济鲁炜:中美青年对两国网络关系应有基本李克强:激励大众创业 助力“三农”改台当局:毛治国将接任台湾行政机构负责武汉开建长江上最宽桥梁 拟于2017身价超百万云锦挂进南京地铁 让市民感云南省纪委两日内通报查处4个州市12仙桃:12名吸贩毒人员同日落网黑龙江省虎林口岸受暴雪影响临时停止客文华学院举办红枫文化节评选出10名红上海迎来今冬初雪 17时前后崇明已出
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘