社区
C++ Builder
帖子详情
如何实现半透明窗体(急!)
Lentil
2000-08-22 05:40:00
请各路神仙指教,如何实现半透明窗体!!!
...全文
285
4
打赏
收藏
如何实现半透明窗体(急!)
请各路神仙指教,如何实现半透明窗体!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shines77
2000-08-23
打赏
举报
回复
去他的原始站点 http://www4.netease.com/~overclock/ 更好
shines77
2000-08-23
打赏
举报
回复
用Alpha 像素运算, CSDN文档中心有!
http://210.77.155.27/develop/read_article.asp?id=317
dandycheung
2000-08-23
打赏
举报
回复
在dandy.163.net中有用VC++写成的代码。
yao_yuan
2000-08-23
打赏
举报
回复
www.ccw.com.cn的技巧中已有这样的文章,不过是delphi的,摘录如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons;
type
TForm1 = class(TForm)
Label1: TLabel;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Image1: TImage;
SpeedButton1: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
//截获背景图象
function GetBackgroundBmp:TBitmap;
//对背景图象进行滤镜处理
procedure TranslucentBmp(Bmp:TBitmap;
AColor:TColor;ATransparent:Longint);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
//以下截获背景图象
function TForm1.GetBackgroundBmp:TBitmap;
var Scn:TCanvas;
h,w:Integer;
begin
Scn:=TCanvas.Create; //建立整个屏幕的画布
h:=ClientHeight;//窗口的高
w:=ClientWidth; //窗口的宽
Result.Height:=h; //设返回位图的高就是窗口的高
Result.Width:=w;//设返回位图的宽就是窗口的宽
try
Scn.Handle:=GetDC(0);//取得整个屏幕的DC
//以下一行将窗口的背景部分复制到指定的画布中,
也就是本函数的返回值
Result.Canvas.CopyRect(Rect(0,0,w,h),Scn,
Rect(Left,Top,Left+w,Top+h));
ReleaseDC(0, Scn.handle);
finally
Scn.Free;
end;
end;
//以下函数对背景图象进行滤镜处理,
Bmp是要处理的位图;ATransparent是透明度
procedure TForm1.TranslucentBmp(Bmp:
TBitmap;AColor:TColor;ATransparent:Longint);
var BkColor:COLORREF;
ForeColor:Longint;
R,G,B:Int64;
i,j:Integer;
begin
ForeColor:=ColorToRGB(AColor);
with Bmp.Canvas do
for i:=ClientHeight-1 downto 0 do
for j:=ClientWidth-1 downto 0 do
begin
BkColor:=GetPixel(Handle,j,i); //取得每一象素
R:=Byte(ForeColor)+
(Byte(BkColor)-Byte(ForeColor))*ATransparent;
G:=Byte(ForeColor shr 8)+
(Byte(BkColor shr 8)-Byte(ForeColor
shr 8))*ATransparent;
B:=Byte(ForeColor shr 16)+
(Byte(BkColor shr 16)-Byte(ForeColor
shr 16))*ATransparent;
SetPixelV(Handle,j,i,RGB(R,G,B));//合成象素
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var BackgroundBmp:TBitmap;
begin
try
BackgroundBmp:=Tbitmap.Create;
//建立窗口背景图
BackgroundBmp.PixelFormat:=pf24bit;
//指定该图是24位真彩色
BackgroundBmp:=GetBackgroundBmp;
//取得窗口背景图
TranslucentBmp(BackgroundBmp,clBlack,50);
//对该图象进行滤镜处理
Image1.Picture.Bitmap:=BackgroundBmp;
//将处理过的图象显示出来
finally
BackgroundBmp.Free;
end;
end;
procedure TForm1.SpeedButton1Click
(Sender: TObject);
begin
Close;
end;
end.
GDI+/GDI
实现
半透贴图动画(png图片,使用updatelayeredwindow)
写在文章前:一个多月前匆匆辞职,本来写好的草稿还没完成就走了,公司都是内网机,自己辛苦经营的成果都弄不出来,这份草稿几乎是仅剩的一点东西(虽然可能也就是入门知识)。现在在自己做yx,想要做些记录时发现这个半成品草稿,有些唏嘘,虽然是半成品,还是发出来便于以后翻看吧。 ================================================================...
在Win32API
窗体
下
实现
透明背景
前面拜读过本站无数高手的许多好文章,受益非浅,首先向各位大侠致敬!今天编程偶有小得,不敢独享,特拿出来与各位共享,希望对某些朋友有些许帮助。 透明
窗体
的问题相信大家已经很熟悉了,前面的几期在线杂志也有几篇详尽的教程,总结一下就是通过SetWindowRgn这个函数来
实现
,具体的裁切框用CRgn来生成,比较简单的 象圆,椭圆,圆角窗口等CRgn类都提供了相应的生成方法,我们如果想根据自己的图片
BCB中如何
实现
控件
半透明
下面以Button为例来
实现
窗体
半透明
实现
简单直接设置属性或者用api来设置层属性来
实现
,但一般控件设置层属性,却得不到
半透明
效果。实际上做一下小改动就可以了。响应
窗体
的OnActivate事件,代码如下。void __fastcall TForm1::FormActivate(TObject *Sender){ long wsex = ::GetWin
MFC
实现
窗口扩展、透明化与背景渐变效果实战
这是Windows的一个扩展样式,启用后窗口可以获得Alpha通道支持,
实现
像素级透明度控制。但它不是“即插即用”的功能,需要手动开启。关键函数是,用来修改窗口的扩展样式:if (!pWnd ||!// 已启用if (!// 强制刷新非客户区这段代码堪称“教科书级”的安全调用实践:双重校验:指针 + 句柄有效性错误码捕获:幂等处理:已启用则跳过强制刷新:让变更生效✅最佳实践:在后调用,避免被资源模板覆盖。
Visual Basic中利用GDI+与PNG
实现
窗体
阴影特效
VB或许不再是聚光灯下的主角,但它依然有能力打造出令人惊艳的现代界面。只要你愿意深入底层,掌握GDI+这套“老而弥坚”的工具链。
窗体
阴影只是一个起点。掌握了这些原理之后,你会发现——圆角窗口、动态渐变、光效反馈、甚至简单的2D动画——都不再是遥不可及的梦想。毕竟,真正的技术实力,从来不是靠“用了多新的框架”来衡量的,而是看你能不能在有限条件下,做出无限可能的效果。💡所以,下次当你面对一个平淡无奇的
窗体
时,不妨问自己一句:“我能给它加个阴影吗?
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章