15,979
社区成员
发帖
与我相关
我的任务
分享
#define WS_EX_LAYERED 0x00080000
#define LWA_ALPHA 0x00000002
typedef BOOL (WINAPI *LPFNSETLAYEREDWINDOWATTRIBUTES)
(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags) ;
//设置窗口的透明度 hwnd是被设置的窗口 byAlpha是指示了透明度(0完全透明 255完全不透明)
BOOL TransparentWnd(HWND hwnd, BYTE byAlpha)
{
long lStyle;
HMODULE hModule;
BOOL bRet;
LPFNSETLAYEREDWINDOWATTRIBUTES lpSetLayeredWindowAttributes;
if(FALSE == IsWindow(hwnd))
{
MessageBox(NULL, TEXT("窗口句柄无效!"), NULL, 0) ;
return FALSE ;
}
hModule = (HMODULE)LoadLibrary(TEXT("user32.dll")) ;
if(hModule)
{
lpSetLayeredWindowAttributes = (LPFNSETLAYEREDWINDOWATTRIBUTES)
GetProcAddress(hModule, TEXT("SetLayeredWindowAttributes")) ;
if(!lpSetLayeredWindowAttributes)
{
MessageBox(hwnd, TEXT("未找到API SetLayeredWindowAttributes的地址!"),
NULL, MB_OK) ;
return FALSE ;
}
}
lStyle = GetWindowLong(hwnd, GWL_EXSTYLE) ;
if(!lStyle)
{
MessageBox(hwnd, TEXT("获取窗口扩展样式失败!"), NULL, MB_OK) ;
return FALSE ;
}
lStyle = lStyle | WS_EX_LAYERED ;
bRet = SetWindowLong(hwnd, GWL_EXSTYLE, lStyle) ;
if(!bRet)
{
MessageBox(hwnd, TEXT("设置窗口扩展样式失败!"), NULL, MB_OK) ;
return FALSE ;
}
bRet = lpSetLayeredWindowAttributes(hwnd, 0, byAlpha, LWA_ALPHA) ;
if(!bRet)
{
MessageBox(hwnd, TEXT("设置窗口透明度失败!"), NULL, MB_OK) ;
return FALSE ;
}
RedrawWindow(hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN) ;
FreeLibrary(hModule) ;
return TRUE ;
}