此函式用於設定分層視窗透明度,常和 UpdateLayeredWindow 函式結合使用。
基本介紹
- 外文名:SetLayeredWindowAttributes
- 結合:UpdateLayeredWindow 函式
- 類型:VB申明,C++申明
聲明,VB申明,C++申明,創建透明視窗,VC6.0調用,C++ 宏值定義,
聲明
VB申明
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
C++申明
BOOL SetLayeredWindowAttributes(
HWND hwnd, // 指定分層視窗句柄
COLORREF crKey, // 指定需要透明的背景顏色值,可用RGB()宏
BYTE bAlpha, // 設定透明度,0表示完全透明,255表示不透明
DWORD dwFlags // 透明方式
);
其中,dwFlags參數可取以下值:
LWA_ALPHA時:crKey參數無效,bAlpha參數有效;
LWA_COLORKEY:窗體中的所有顏色為crKey的地方將變為透明,bAlpha參數無效。其常量值為1。
LWA_ALPHA | LWA_COLORKEY:crKey的地方將變為全透明,而其它地方根據bAlpha參數確定透明度。
創建透明視窗
LONG t = GetWindowLong(m_hWnd, GWL_EXSTYLE);
t |= WS_EX_LAYERED;
SetWindowLong(m_hWnd, GWL_EXSTYLE, t);
VC6.0調用
此函式在VC6.0中沒有聲明,需要自定義後在user32.dll後動態獲取地址後調用。在VC9.0(VS2008)及其之後版本中可以直接調用
動態調用user32.dll中的SetLayeredWindowAttributes函式:
BOOL SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags)
{
LAYERFUNC SetLayer;
HMODULE hmod = LoadLibrary("user32.dll");
SetLayer=(LAYERFUNC)GetProcAddress(hmod,"SetLayeredWindowAttributes");
BOOL bReturn = SetLayer(hwnd,crKey,bAlpha,dwFlags);
FreeLibrary(hmod);
return bReturn;
}
C++ 宏值定義
#define LWA_COLORKEY 0x00000001
#define LWA_ALPHA 0x00000002