SetLayeredWindowAttributes

SetLayeredWindowAttributes

此函式用於設定分層視窗透明度,常和 UpdateLayeredWindow 函式結合使用。

聲明

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參數確定透明度。

創建透明視窗

要使使窗體擁有透明效果,首先要有WS_EX_LAYERED擴展屬性,方法可以在CreateWindowEx時指定,也可以SetWindowLong動態設定。如下代碼可設定分層視窗:

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函式

typedef BOOL (FAR WINAPI *LAYERFUNC)(HWND,COLORREF,BYTE,DWORD);

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 RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))

#define LWA_COLORKEY 0x00000001

#define LWA_ALPHA 0x00000002

相關詞條

相關搜尋

熱門詞條

聯絡我們