summaryrefslogtreecommitdiff
path: root/alf/alfcompat.h
blob: 98a2abc0029913399b903e1b39b8b212cba6d8fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#pragma once

#include <windows.h>
#include <rpc.h>

#ifndef WM_DPICHANGED
#define WM_DPICHANGED       0x02E0
#endif

typedef LRESULT (CALLBACK *ALF_COMPAT_SUBCLASSPROC)(HWND,UINT,WPARAM,LPARAM,UINT_PTR,DWORD_PTR);
typedef struct {
    BOOL (WINAPI *SetWindowSubclass)(HWND, ALF_COMPAT_SUBCLASSPROC, UINT_PTR, DWORD_PTR);
    LRESULT (WINAPI *DefSubclassProc)(HWND, UINT, WPARAM, LPARAM);
    BOOL (WINAPI *RemoveWindowSubclass)(HWND, ALF_COMPAT_SUBCLASSPROC, UINT_PTR);
    int (WINAPI *GetSystemMetricsForDpi)(int,  UINT);
    BOOL (WINAPI *IsAppThemed)(void);
    UINT (WINAPI *GetDpiForWindow)(HWND);
    BOOL (WINAPI *SystemParametersInfoForDpi)(UINT,UINT,PVOID,UINT,UINT);
    BOOL (WINAPI *AdjustWindowRectExForDpi)(LPRECT,DWORD,BOOL,DWORD,UINT);
    ULONG (WINAPI *UuidCreate)(UUID *);
} ALFCompatFunctions;


typedef struct {
    UINT    cbSize;
    int     iBorderWidth;
    int     iScrollWidth;
    int     iScrollHeight;
    int     iCaptionWidth;
    int     iCaptionHeight;
    LOGFONT lfCaptionFont;
    int     iSmCaptionWidth;
    int     iSmCaptionHeight;
    LOGFONT lfSmCaptionFont;
    int     iMenuWidth;
    int     iMenuHeight;
    LOGFONT lfMenuFont;
    LOGFONT lfStatusFont;
    LOGFONT lfMessageFont;
    int     iPaddedBorderWidth; // new in Vista
} ALF_NONCLIENTMETRICS_VISTA;

static inline SIZE_T
ALF_SizeOf_NONCLIENTMETRICS(void)
{
    if (LOBYTE(LOWORD(GetVersion())) >= 6) {
        return sizeof(ALF_NONCLIENTMETRICS_VISTA);
    } else {
        return sizeof(ALF_NONCLIENTMETRICS_VISTA) - sizeof(int);
    }
}

ALFCompatFunctions *
ALF_CreateCompatFuncTable(void);

long
ALF_GetAveCharWidth(HDC hdc);