透明窗体的实现

1.

#define  WS_EX_LAYERED 0x00080000 
#define  LWA_COLORKEY 1  //  Use color as the transparency color.
#define  LWA_ALPHA    2  //  Use bAlpha to determine the opacity of the layer

HMODULE hModule 
= GetModuleHandle( " User32.DLL " );

typedef BOOL (WINAPI
*  SETLAYEREDWND)( HWND, COLORREF, BYTE, DWORD);
SETLAYEREDWND SetLayeredWindowPtr 
=  NULL;
SetLayeredWindowPtr 
=  (SETLAYEREDWND)GetProcAddress(hModule,  " SetLayeredWindowAttributes " );

 

2.

SetTransparent (BYTE bAlpha)
{
    
if (SetLayeredWindowPtr == NULL)
        
return;

    
if (bAlpha < 255)
    
{
        
//  set layered style for the dialog
        SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
        
        
//  call it with 255 as alpha - opacity
        SetLayeredWindowPtr (m_hWnd, 0, bAlpha, LWA_ALPHA);
    }

    
else
    
{
        SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) 
& ~WS_EX_LAYERED);

        
// Ask the window and its children to repaint
        ::RedrawWindow(m_hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
    }

}


 

3.

SetTransparentColor (COLORREF col, BOOL bTrans)
{
    
if (SetLayeredWindowPtr == NULL)
        
return;

    
if (bTrans)
    
{
        
//  set layered style for the dialog
        SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
        
//  call it with 0 alpha for the given color
        SetLayeredWindowPtr (m_hWnd, col, 250, LWA_COLORKEY);
    }

    
else
    
{
        SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) 
& ~WS_EX_LAYERED);

        
// Ask the window and its children to repaint
        ::RedrawWindow(m_hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值