
皮肤
aroc_lo
这个作者很懒,什么都没留下…
展开
-
透明皮肤控件设计系列(二):皮肤窗口初级篇
Windows将窗口分为客户区和非客户区,例如对于标准的Windows窗口,标题栏和边框都属于非客户区,又称为NC区。对于客户区的绘制,应用程序会收到WM_PAINT消息,而非客户区,对应的消息是WM_NCPAINT。要实现皮肤窗口,需要三个步骤:第一步:定义非客户区的大小。要自定义非客户区的大小,程序就要响应WM_NCCALCSIZE消息。假设我们的标题高度为60(像素,下同),转载 2013-08-12 13:23:58 · 1356 阅读 · 0 评论 -
透明皮肤控件设计系列(四):皮肤窗口完结篇
经过上面的几篇文章的介绍,相信大家已经会自己做一个透明皮肤窗口了,但是要记住,上文因为是基础教程,所以很多细节仍然是需要处理的,例如:1、为了加快速度,实际上可以先用MakeBmp函数制作好皮肤图片,平均颜色就是取图片右下角的一个点即可。例如QQ的皮肤包就是这么干的。2、如果实在想运行时计算,那么可以先将图片缩小,再计算平均颜色。这样一来,循环的次数就减少了,而效果是一样的。转载 2013-08-12 13:56:41 · 781 阅读 · 0 评论 -
透明皮肤控件设计系列(一):前言
转自:http://www.138soft.com/?p=35Delphi的皮肤控件非常多,例如DynamicSkinForm等等。以前都是习惯直接使用第三方皮肤控件,后来在开发一个内部IM聊天工具的时候,发现没有现成的IM控件,网上有一些介绍模仿QQ界面的文章,但不成系列,重要的是都是“看起来像”,离”实际能使用”差的很远,于是自己开发了一个。老实说,因为以前都是依赖第三方控件,转载 2013-08-12 13:14:45 · 1209 阅读 · 0 评论 -
透明皮肤控件设计系列(三):皮肤窗口进阶篇
前文的窗口如果最大化,你会发现它把任务栏也覆盖了,原因是我们窗口的 BorderStyle 设置成了 bsNone,所以要处理一下WM_GETMINMAXINFO消息:procedure TForm1.WMGETMINMAXINFO(var Message: TMessage);var Rect: TRect;begin SystemParametersInfo(SPI_GET转载 2013-08-12 13:41:11 · 1111 阅读 · 1 评论 -
透明皮肤控件设计系列(五):透明控件
现在我们有了透明窗口,那么所有控件也应该是透明的。控件透明,原理其实很简单,就是把父控件的图像复制到自己上面即可。例如,常用的方法是给父控件发送背景重画的消息,同时把自己的DC传递过去:SendMessage(Parent.Handle, WM_ERASEBKGND, DC, 0);TCtrl(Parent).PaintControls(DC, nil);这种方法对于非转载 2013-08-12 14:01:53 · 764 阅读 · 0 评论