111 lines
3.1 KiB
C++
Raw Normal View History

2024-05-27 16:29:22 +08:00
#include "define.h"
typedef enum _WINDOWCOMPOSITIONATTRIB
{
CA_UNDEFINED = 0,
WCA_NCRENDERING_ENABLED = 1,
WCA_NCRENDERING_POLICY = 2,
WCA_TRANSITIONS_FORCEDISABLED = 3,
WCA_ALLOW_NCPAINT = 4,
WCA_CAPTION_BUTTON_BOUNDS = 5,
WCA_NONCLIENT_RTL_LAYOUT = 6,
WCA_FORCE_ICONIC_REPRESENTATION = 7,
WCA_EXTENDED_FRAME_BOUNDS = 8,
WCA_HAS_ICONIC_BITMAP = 9,
WCA_THEME_ATTRIBUTES = 10,
WCA_NCRENDERING_EXILED = 11,
WCA_NCADORNMENTINFO = 12,
WCA_EXCLUDED_FROM_LIVEPREVIEW = 13,
WCA_VIDEO_OVERLAY_ACTIVE = 14,
WCA_FORCE_ACTIVEWINDOW_APPEARANCE = 15,
WCA_DISALLOW_PEEK = 16,
WCA_CLOAK = 17,
WCA_CLOAKED = 18,
WCA_ACCENT_POLICY = 19,//
WCA_FREEZE_REPRESENTATION = 20,
WCA_EVER_UNCLOAKED = 21,
WCA_VISUAL_OWNER = 22,
WCA_LAST = 23
} WINDOWCOMPOSITIONATTRIB;
typedef struct _WINDOWCOMPOSITIONATTRIBDATA
{
WINDOWCOMPOSITIONATTRIB Attrib;
PVOID pvData;
SIZE_T cbData;
} WINDOWCOMPOSITIONATTRIBDATA;
typedef enum _ACCENT_STATE
{
ACCENT_DISABLED = 0,
ACCENT_ENABLE_GRADIENT = 1,
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
ACCENT_ENABLE_BLURBEHIND = 3,
ACCENT_ENABLE_ACRYLICBLURBEHIND = 4,
ACCENT_INVALID_STATE=5
} ACCENT_STATE;
typedef struct _ACCENT_POLICY
{
ACCENT_STATE AccentState;
DWORD AccentFlags;
DWORD GradientColor;
DWORD AnimationId;
} ACCENT_POLICY;
WINUSERAPI
BOOL
WINAPI
GetWindowCompositionAttribute(
_In_ HWND hWnd,
_Inout_ WINDOWCOMPOSITIONATTRIBDATA* pAttrData);
typedef BOOL(WINAPI* pfnGetWindowCompositionAttribute)(HWND, WINDOWCOMPOSITIONATTRIBDATA*);
WINUSERAPI
BOOL
WINAPI
SetWindowCompositionAttribute(
_In_ HWND hWnd,
_Inout_ WINDOWCOMPOSITIONATTRIBDATA* pAttrData);
typedef BOOL(WINAPI* pfnSetWindowCompositionAttribute)(HWND, WINDOWCOMPOSITIONATTRIBDATA*);
#define common ACCENT_POLICY accentPolicy;\
WINDOWCOMPOSITIONATTRIBDATA winCompAttrData;\
ZeroMemory(&accentPolicy,sizeof(accentPolicy));\
ZeroMemory(&winCompAttrData,sizeof(winCompAttrData));\
winCompAttrData.Attrib = WCA_ACCENT_POLICY;\
winCompAttrData.cbData = sizeof(accentPolicy);\
winCompAttrData.pvData = &accentPolicy;\
auto setWindowCompositionAttribute = (pfnSetWindowCompositionAttribute)GetProcAddress(GetModuleHandle(L"user32.dll"), "SetWindowCompositionAttribute");\
if(!setWindowCompositionAttribute)return false;
DECLARE bool setAcrylicEffect(HWND hwnd){
DWORD gradientColor=0x30F2F2F2;//ABGR
bool isEnableShadow=true;
DWORD animationId= 0;
auto accentFlags = isEnableShadow?(DWORD(0x20 | 0x40 | 0x80 | 0x100)):0;
common
accentPolicy.AccentState =ACCENT_ENABLE_ACRYLICBLURBEHIND;
accentPolicy.GradientColor = gradientColor;
accentPolicy.AccentFlags = accentFlags;
accentPolicy.AnimationId = animationId;
return setWindowCompositionAttribute(hwnd,&winCompAttrData);
}
DECLARE bool setAeroEffect(HWND hwnd){
common
accentPolicy.AccentState =ACCENT_ENABLE_BLURBEHIND;
return setWindowCompositionAttribute(hwnd,&winCompAttrData);
}
DECLARE bool clearEffect(HWND hwnd){
common
accentPolicy.AccentState =ACCENT_DISABLED;
return setWindowCompositionAttribute(hwnd,&winCompAttrData);
}