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

透明控件的实现方法

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应用开发。
VB利用 App.Path 读取「应用程序所在之目录」 VB利用 EM_LINESCROLL 信息控制 TextBox 的卷动。 命名的技巧 -VB资料 目录所占的字节数-VB资料 VB判断文件是否在IE的缓存中 屏蔽文本框的右键菜单-VB资料 VB取得长文件名 VB取得临时文件名 VB取得某个目录底下所有文件大小总和 VB取得文件的扩展名 VB取得文件内容 确定 TextBox 有几行-VB资料 确定是 WINDOWS 的可执行文件-VB资料 让打印机只打印一行-VB资料 VB如何把批处理文件转换成EXE文件? VB如何调用 Office VB如何将文件删除到回收站 VB如何快速移动文件? VB如何让文本框输入完后,直接跳入下一行? VB如何使用vb取得一个文件的控制权 VB如何使用文件复制对话框? VB如何使用资源文件 VB如何用Dir()函数来列出C下所有TMP文件并且用文本框输出 VB如何在 VB 中使用 Winzip 来压缩文件? VB如何在DOS程序结束执行时,自动将其关闭? VB如何在VB中实现Undo(撤消)功能? VB如何在VB中实现目录遍历 VB如何在Windows操作系统中改变文件打开方式 VB如何知道硬盘是使用那一种文件系統(FAT32,FAT16)? VB如何自动更动成中文输入 VB删除整个目录 【求助】一个小问题,在线待回 DBGrid1如何获得2个表里的数据 帮帮菜鸟呀`/! 如何用C#在ASP.net中对数据库进行查询? 求获取FTP服务器上文件的创建日期的代码 系统已经从一个严重错误中恢复。 怎样使一个页面访问过后立即过期? and 和 or 有什么不同??? 关于oracle 配置的问题 Oracle数据库实例和数据文件的问题求助 调查:各位用Lotus开发的时候,对源码如何做版本控制的?效果如何? 请问各位高手现在业界对工作流与电子工单有没有统一的标准? 动态生成STATIC 文本框,把里面的文字都加上下划线,怎么做? 有什么好的类似于QQ的局域网通讯程序???可支持WIN98及WINXP间的通讯!!! 我快晕了,急救! 低手勿入,高手请进,剧难??? 一个程序调试中产生的问题 -------数据接收和发送模式的问题!(非资深程序员勿入)100分只给答的最好的 求救!关于坐标系转换问题 现在很多邮件服务器要身份验证,ASP.NET(C#)的SMTPMAIL类有设置身份验证和密码的属性吗? 怎么在基于对话框的程序中加入一幅bmp作为底图? 刚学java,碰到一问题,请 有空进来看看 showMessageDialog的使用问题 disable mainmenu控件的某个subitem怎样实现 哈哈,需要短信网关IP地址及其源代码的快来顶一下。 sybase12.0安装时的问题??? 怎么样能用asp编写使得IE打开pdf文件?在查询后怎样还能在查询的输入框里面保留查询的输入? 如何使用TreeView进行分级管理 触发器的效率问题! 寻求解决方案 组件刷新问题,UP有分 请问 虚拟目录 和 WEB站点 有什么区别? DBEXPRESS的问题!很简单 请问那里有支持中文好的jsp开发的webmail下载?很急!谢谢大家了! 我如何在程序中切换输入法 怎么把一个COleDateTime类型的变量转成time_t类型(long型)变量? 结构成员这样定义 WCHAR bString[0]; 长度为0有意义吗? 关于DLL中的函数 如何动态分配指针数组? 哪里有关于delphi多线程资料下载? 急!!!SQL2000数据库IMAGE图象数据的存取?????? 这个存储过程怎么写? D7中的这个怎不见了啊-----急急 为什么只能传递两个汉字?有解决的办法吗? 关于DLL文件中的函数 lotus菜鸟请求急就!!!!!!!! 如何动态分配指针数组? 怎样实现点击按钮,将光标所在行的某列参数传到另一个form,显示出另一个表的某条相关记录? 这句话到底有什么含义??? T-SQL连接字符串的操作符号是? 问一个送分问题。 如何验证溶液中既有硫酸钠又有稀硫酸 棉花糖怎么融化? 动植物体内是否既有RNA还有DNA 格兰仕光波炉怎么用啊?1111 棉花糖舔一下为什么会融化? 嘴里的棉花糖也融化了 是哪个歌里的天也.了...口中的棉花糖也融化了 .妇昵毫概 格兰仕光波炉好用吗格兰仕光波炉好用马?有谁知道 我做的棉花糖为什么容易融化我是新手,刚好不容易做出来一团棉花糖,但1分钟不到,就开始一点点掉了.而且还变颜色?请问这是为什么啊.为什么我看到别人卖的那些样品放好久都不化呢?最好 药厂检验员主要是做什么工作?主要是做医药的 变压器直流电阻测试仪2011新品厂家?宝应高电电力设备厂,变压器直流电阻测试仪有呀 格兰仕光波炉的价格我今天刚买了台格兰仕G80D23YSL-K10型号的光波炉,价格是550元;但是没送东西,只有本身带的烧烤架和托盘,再就是个塑料盒子暂时还不知道是做什么用的.大家认为我买的划 为什么笛子可以吹出不同的音调?求原理, 什么物质中含钙量多 fuck ucopy of die do u 怎样证明桌子在振动,设计个实验 98%的硫酸稀释成0.01mol/L的硫酸需要的硫酸和水的配比 FUCK you to die 什么意思 请说出5种活泼亚甲基化合物,但是必须是除酮、酯类以外的活泼亚甲基化合物,如果答案令我非常满意的话,一定额外加分. 如何去除高锰酸钾的染色 怎样证明某无色溶液是稀硫酸溶液,简叙操作过程,并写出有关反应的化学方程式. 求一种含有下面基团的化合物,最好为表面活性剂类.苯甲酸,(脂肪)醚键,甲基,亚甲基. 用量筒取20ml05mol/l硫酸溶液于烧杯中加水80ml配置成01mol/l硫酸溶液对? 某溶液+稀硫酸=生成无色气体,说明该溶液中含有CO2-这句话对吗? f调笛子各个笛孔所对的音调我不想要那些指法的图,因为我当初学习笛子的时候,教我的人直接告诉我每个笛孔所对的音调是什么,但太久了,我忘记了,我现在就想知道各个笛孔所对应的的音调 那些食物含钙物质比较高?3Q 某溶液和稀硫酸反应生成无色气体,是不是说明原溶液中含有碳酸根? 科学家对狼的评价文学作品所描写的动物往往会被作家赋予人的品格,如称狼“聪明”或“狡猾”“勇敢”或“凶残”,用词的褒贬区别都是由作者的立场和情感态度所决定的.你觉得科学家会 在腌制咸菜几天里,怎么观察亚硝酸盐的多少? 光致防雾隔热系列中,SF100防雾至尊型号的紫外线阻隔率参数是多少? 古今中外一共有多少位科学家认识到肠道的重要性再说出分别是哪几位 浆细胞是唯一无法识别抗原的细胞,其原因是什么? 如何用无色酚酞试液证明稀硫酸与氢氧化钠溶液确实发生了反映 体液免疫能特异性识别并清除体内的癌变细胞为什么不对? 纸上谈兵的主人公是谁的 我皮肤白嫩 要想成古铜色 晒太阳 又要防紫外线 应用什么防晒产品.紫外线才能让变黑 防晒品又阻挡紫外线 这矛盾啊 如图所示电路,下列.判断中错误的是 17题 浆细胞也不能识别抗原,为什么具有特异性? 紫外线灯管15W的有T8系列的吗石家庄哪里有卖的 棉花糖做多了怎么办?可以融化重新做吗? 高锰酸钾溶液弄在手上洗不掉怎么办啊用什么方法可以洗下去呢急 在某共价化合物中,M元素显-2价,这是由于A.一个M原子得到两个电子 B.一个M原子失去两个电子 C.两个共用电子对偏离M原子 D.偏向 植物培养基里有些什么? 滴入一定量的稀盐酸或稀硫酸以后,溶液从红色变为无色,这说明溶液的酸碱性发生了什么变化RT 磁体上磁性最强的部分叫做(),它的位置在磁体的(). 植物培养液哪儿买上海孙桥求助 什么是无机物? 什么叫低压阀门 有倒管的培养基杀菌需注意什么问题 什么才是无机物? 请问甲基环戊二烯三羰基锰光解产物都有哪些?最终生成哪些稳定化合物? 做抑菌圈实验的时候,如果用大肠杆菌为细菌的话,需要在培养基中培养多久再涂布到固体培养基上? 无机物包括什么 五甲基环戊二烯是禁运品吗? 0、如图所示电路出现下列一处故障后,请将会出现的电路现象填写在表格中:(灯填“不亮”、“变亮”或“变暗”,表填“无示数”、“示数变大”或“示数变小”) 怎样判断中心原子的价层电子对中的孤对电子对? 我想问一下五甲基环戊二烯锂在空气中是否稳定? 高等动植物细胞内都含有的物质是 A血红蛋白 B淀粉、RNA C酶、DNA D纤维素、激素 证明一种溶液是稀硫酸溶液,要加什么物质? 由O、Al两种元素组成的化合物溶于过量的气氧化钾溶液中的离子方程式为 激素可以是RNA吗 约有40万杭州人的骨头不够硬叙问题特使将抵达叙利亚 筹备日内瓦国中国首支海军核潜艇部队 42年潜行百19岁坚强女孩爬行上大学:选择学医将女学生被抱养18年无户口 相关部门称瞭望:以宏大的高素质人才队伍托起中国香港不满马尼拉向华人筹募赔款 港媒骂浙江国企力邀民企加盟 推3244亿元宁波大学举办“国际文化日”国务院部署推进公司注册资本登记制度改《我是特种兵之火凤凰》演员拍摄搞笑花不留遗憾,5对老夫妻补拍婚纱照美对华钢铁产品发起贸易救济调查宁波市环境空气质量优良率在浙江省排名发改委官员:我国城市群交通存在三大问工业利润增势保持稳定但增长基础仍然脆廊坊数百学生不满校园管理聚集抗议 官俄媒:俄中简化边界海关检查体现两国高医改网站技术问题百出 奥巴马上教堂也上海自贸区基本运行制度创新框架已建立收入分配改革有望三中全会后推进 提低连带困境北斗负责人:北斗系统在区域范围内精度习近平:中国是亚洲安全观的积极倡导者盘点全球最奇特的准妈妈孕期照片(高清中俄领导人为何如此关注阿富汗全球人口贩卖受害者达2100万 人贩下一篇粤入汛以来降水多5成日化企业最热衷冠名决定选聘25名环保咨询专家等待有缘人3000粤曲迷捧场红船星辉二手车一周推荐威胁美国航天基地超出市场预期外资零售巨头再掀开店潮600万条下一篇中方人员安抵海口不应有第二次鲁豫周立波或借能量影视IPO
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘