下面以Button为例来实现
窗体半透明实现简单直接设置属性或者用api来设置层属性来实现,但一般控件设置层属性,却得不到半透明效果。实际上做一下小改动就可以了。
响应窗体的OnActivate事件,代码如下。
void __fastcall TForm1::FormActivate(TObject *Sender)
{
long wsex = ::GetWindowLongPtr(Handle, GWL_EXSTYLE );
wsex |= WS_EX_TOOLWINDOW ;
wsex &= ~WS_EX_APPWINDOW;
::SetWindowLongPtr(Button1->Handle, GWL_EXSTYLE, wsex );
::SetParent(Button1->Handle ,GetDesktopWindow());
SetWindowLong(Button1->Handle, GWL_EXSTYLE, GetWindowLong(Button1->Handle, GWL_EXSTYLE ) ^ WS_EX_LAYERED ^ WS_EX_TRANSPARENT );
::SetLayeredWindowAttributes(Button1->Handle, RGB( 0, 0, 0 ), 255 - 100, LWA_ALPHA );
Button1->Refresh() ; // 一定要呼叫,否则失败
::SetParent(Button1->Handle,Form1->Handle);
But