#pragma once #include #include #include #ifndef WM_DPICHANGED #define WM_DPICHANGED 0x02E0 #endif #ifdef __cplusplus extern "C" IMAGE_DOS_HEADER __ImageBase; #else extern IMAGE_DOS_HEADER __ImageBase; #endif #define ALF_HINSTANCE ((HINSTANCE)&__ImageBase) typedef struct { UINT cbSize; int iBorderWidth; int iScrollWidth; int iScrollHeight; int iCaptionWidth; int iCaptionHeight; LOGFONTW lfCaptionFont; int iSmCaptionWidth; int iSmCaptionHeight; LOGFONTW lfSmCaptionFont; int iMenuWidth; int iMenuHeight; LOGFONTW lfMenuFont; LOGFONTW lfStatusFont; LOGFONTW lfMessageFont; int iPaddedBorderWidth; // new in Vista } ALF_NONCLIENTMETRICSW_VISTA; typedef struct { UINT cbSize; int iBorderWidth; int iScrollWidth; int iScrollHeight; int iCaptionWidth; int iCaptionHeight; LOGFONTA lfCaptionFont; int iSmCaptionWidth; int iSmCaptionHeight; LOGFONTA lfSmCaptionFont; int iMenuWidth; int iMenuHeight; LOGFONTA lfMenuFont; LOGFONTA lfStatusFont; LOGFONTA lfMessageFont; int iPaddedBorderWidth; // new in Vista } ALF_NONCLIENTMETRICSA_VISTA; long ALF_GetAveCharWidth(HDC hdc); typedef void *ALF_Compat_HANIMATIONBUFFER; typedef enum { ALF_Compat_BPAS_NONE, ALF_Compat_BPAS_LINEAR, ALF_Compat_BPAS_CUBIC, ALF_Compat_BPAS_SINE } ALF_Compat_BP_ANIMATIONSTYLE; typedef struct { DWORD cbSize; DWORD dwFlags; ALF_Compat_BP_ANIMATIONSTYLE style; DWORD dwDuration; } ALF_Compat_BP_ANIMATIONPARAMS; typedef struct { DWORD cbSize; DWORD dwFlags; const RECT *prcExclude; const BLENDFUNCTION *pBlendFunction; } ALF_Compat_BP_PAINTPARAMS; #ifndef TMT_TRANSITIONDURATION #define TMT_TRANSITIONDURATION 6000 #endif void ALF_LoadCompatFunctions(void); void ALF_UnloadCompatFunctions(void); inline static void ALF_Compat_LogFontWtoA(const LOGFONTW *w, LOGFONTA *a) { CopyMemory(a, w, sizeof(LOGFONTA) - LF_FACESIZE); WideCharToMultiByte(CP_ACP, 0, w->lfFaceName, -1, a->lfFaceName, LF_FACESIZE, NULL, NULL); a->lfFaceName[LF_FACESIZE - 1] = '\0'; } inline static void ALF_Compat_LogFontAtoW(const LOGFONTA *a, LOGFONTW *w) { CopyMemory(w, a, sizeof(LOGFONTA) - LF_FACESIZE); MultiByteToWideChar(CP_ACP, 0, a->lfFaceName, -1, w->lfFaceName, LF_FACESIZE); w->lfFaceName[LF_FACESIZE - 1] = 0; } extern int (*ALF_Compat_DrawDisabledText)(HDC,LPCTSTR,int,LPRECT,UINT); extern BOOL (WINAPI *ALF_Compat_IsAppThemed)(void); extern UINT (WINAPI *ALF_Compat_GetDpiForWindow)(HWND); extern BOOL (WINAPI *ALF_Compat_AdjustWindowRectExForDpi)(LPRECT,DWORD,BOOL,DWORD,UINT); extern int (WINAPI *ALF_Compat_GetSystemMetricsForDpi)(int, UINT); extern BOOL (WINAPI *ALF_Compat_SystemParametersInfoForDpi)(UINT,UINT,PVOID,UINT,UINT); extern HTHEME (WINAPI *ALF_Compat_OpenThemeData)(HWND, LPCWSTR); extern HRESULT (WINAPI *ALF_Compat_CloseThemeData)(HTHEME); extern BOOL (WINAPI *ALF_Compat_IsThemeBackgroundPartiallyTransparent)(HTHEME,int,int); extern HRESULT (WINAPI *ALF_Compat_DrawThemeParentBackground)(HWND,HDC,RECT *); extern HRESULT (WINAPI *ALF_Compat_DrawThemeBackground)(HTHEME, HDC, int, int, const RECT *, const RECT *); extern HRESULT (WINAPI *ALF_Compat_GetThemeBackgroundContentRect)(HTHEME,HDC,int,int,const RECT *,RECT *); extern HRESULT (WINAPI *ALF_Compat_GetThemeTextExtent)(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,const RECT *, RECT *); extern HRESULT (WINAPI *ALF_Compat_DrawThemeText)(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD,const RECT *); extern HRESULT (WINAPI *ALF_Compat_GetThemePartSize)(HTHEME,HDC,int,int,RECT *,THEMESIZE,SIZE *); extern BOOL (WINAPI *ALF_Compat_TrackMouseEvent)(LPTRACKMOUSEEVENT tme); extern HRESULT (WINAPI *ALF_Compat_BufferedPaintInit)(void); extern HRESULT (WINAPI *ALF_Compat_BufferedPaintUnInit)(void); extern ALF_Compat_HANIMATIONBUFFER (WINAPI *ALF_Compat_BeginBufferedAnimation)(HWND,HDC,const RECT *,DWORD,ALF_Compat_BP_PAINTPARAMS *,ALF_Compat_BP_ANIMATIONPARAMS *,HDC *,HDC *); extern HRESULT (WINAPI *ALF_Compat_EndBufferedAnimation)(ALF_Compat_HANIMATIONBUFFER,BOOL); extern BOOL (WINAPI *ALF_Compat_BufferedPaintRenderAnimation)(HWND,HDC); extern HRESULT (WINAPI *ALF_Compat_GetThemeTransitionDuration)(HTHEME,int,int,int,int,DWORD*); extern HRESULT (WINAPI *ALF_Compat_GetThemeColor)(HTHEME,int,int,int,COLORREF*); // compatibility bits #define ALF_COMPAT_ISNT 1 #define ALF_COMPAT_IS40 2 #define ALF_COMPAT_ISW2K 4 #define ALF_COMPAT_ISXP 8 #define ALF_COMPAT_ISVISTA 16 #define ALF_COMPAT_ISCOMCTLV6 32 extern DWORD _alf_compatBits; static inline BOOL ALF_Compat_IsWin9x(void) { return !(_alf_compatBits & ALF_COMPAT_ISNT); } static inline BOOL ALF_Compat_IsNT(void) { return !!(_alf_compatBits & ALF_COMPAT_ISNT); } static inline BOOL ALF_Compat_Is40(void) // both NT 4.0 and Win95 { return !!(_alf_compatBits & ALF_COMPAT_IS40); } static inline BOOL ALF_Compat_Is2k(void) { return !!(_alf_compatBits & ALF_COMPAT_ISW2K); } static inline BOOL ALF_Compat_IsXP(void) { return !!(_alf_compatBits & ALF_COMPAT_ISXP); } static inline BOOL ALF_Compat_IsVista(void) { return !!(_alf_compatBits & ALF_COMPAT_ISVISTA); } static inline BOOL ALF_Compat_IsComCtlV6(void) { return !!(_alf_compatBits & ALF_COMPAT_ISCOMCTLV6); }