透明皮肤控件设计系列(五):透明控件

来源:互联网 发布:苹果手机投影仪软件 编辑:程序博客网 时间: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点这里下载。
原创粉丝点击