SetLayeredWindowAttributes

SetLayeredWindowAttributes

此函式用於設定分層視窗透明度,常和 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參數確定透明度。

創建透明視窗

要使使窗體擁有透明效果,首先要有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);
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

相關詞條

熱門詞條

聯絡我們