透明皮肤控件设计系列(五):透明控件
来源:互联网 发布:苹果手机投影仪软件 编辑:程序博客网 时间:2024/06/11 06:10
现在我们有了透明窗口,那么所有控件也应该是透明的。
控件透明,原理其实很简单,就是把父控件的图像复制到自己上面即可。例如,常用的方法是给父控件发送背景重画的消息,同时把自己的DC传递过去:
SendMessage(Parent.Handle, WM_ERASEBKGND, DC, 0);
TCtrl(Parent).PaintControls(DC, nil);
这种方法对于非自己设计的皮肤窗口也有效,但缺点是会因为父窗口重画造成闪烁。
现在因为透明窗口也是我们自己制作的,所以方法就简单多了:根据自己的坐标位置,直接从图片拷贝即可。以CheckBox为例,代码段如下:
Buffer := TBitMap.Create;
Buffer.Width := Width;
Buffer.Height := Height;
//复制底部图片
Buffer.Canvas.Brush.Color:=Form1.m_BackColor;
Buffer.Canvas.FillRect(ClientRect);
Buffer.Canvas.CopyRect(ClientRect,Form1.m_BackBMP.Canvas,Rect(Left+xFramWidth,Top+xTitleHeight,Left+xFramWidth+Width,Top+xTitleHeight+Height));
效果如下:
详细代码点这里下载。
Pngimage for Delphi7点这里下载。
控件透明,原理其实很简单,就是把父控件的图像复制到自己上面即可。例如,常用的方法是给父控件发送背景重画的消息,同时把自己的DC传递过去:
SendMessage(Parent.Handle, WM_ERASEBKGND, DC, 0);
TCtrl(Parent).PaintControls(DC, nil);
这种方法对于非自己设计的皮肤窗口也有效,但缺点是会因为父窗口重画造成闪烁。
现在因为透明窗口也是我们自己制作的,所以方法就简单多了:根据自己的坐标位置,直接从图片拷贝即可。以CheckBox为例,代码段如下:
Buffer := TBitMap.Create;
Buffer.Width := Width;
Buffer.Height := Height;
//复制底部图片
Buffer.Canvas.Brush.Color:=Form1.m_BackColor;
Buffer.Canvas.FillRect(ClientRect);
Buffer.Canvas.CopyRect(ClientRect,Form1.m_BackBMP.Canvas,Rect(Left+xFramWidth,Top+xTitleHeight,Left+xFramWidth+Width,Top+xTitleHeight+Height));
效果如下:
详细代码点这里下载。
Pngimage for Delphi7点这里下载。
- 透明皮肤控件设计系列(五):透明控件
- 透明皮肤控件设计系列(一):前言
- 透明皮肤控件设计系列(二):皮肤窗口初级篇
- 透明皮肤控件设计系列(三):皮肤窗口进阶篇
- 透明皮肤控件设计系列(四):皮肤窗口完结篇
- Windows mobile 透明/半透明控件组(皮肤控件)
- 控件透明
- QtUI设计:设置控件透明
- C# 透明控件(WinForm)
- 【整理】控件透明
- 透明的CEdit控件
- 透明的CEdit控件
- 控件透明背景
- 透明控件的新发现!
- Windows Mobile 透明控件
- 设置控件透明属性:
- CE 控件透明
- 透明控件的制作
- Subversion服务器程序版本说明
- css中设置前景色的透明度
- LXC 简单实用说明
- 字符串汉字英文数字判断
- 20130809, 微软八月安全补丁提前通知
- 透明皮肤控件设计系列(五):透明控件
- Java_学生信息管理系统-后台数据库设计
- java设计模式———工厂模式(工厂方法模式)
- Linux命令行的妙用
- 有关锁的一些总结
- oracle如何创建表空间和备份数据
- 火狐对注释的解析错误问题
- 关于错误:android.app.RemoteServiceException: Bad notification posted from package
- 终于知道google为什么有时不能用了