[BTRFS]
[reactos.git] / base / applications / msconfig_new / comctl32ex / uxthemesupp.c
1 /*
2 * PROJECT: ReactOS Applications
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: base/applications/msconfig_new/comctl32ex/uxthemesupp.c
5 * PURPOSE: UX Theming helpers.
6 * COPYRIGHT: Copyright 2015 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
7 */
8
9 #include "precomp.h"
10 #include "uxthemesupp.h"
11
12 static HMODULE hUxTheme = NULL;
13
14 typedef HRESULT (WINAPI* ETDTProc)(HWND, DWORD);
15 static ETDTProc fnEnableThemeDialogTexture = NULL;
16
17 typedef HRESULT (WINAPI* SWTProc)(HWND, LPCWSTR, LPCWSTR);
18 static SWTProc fnSetWindowTheme = NULL;
19
20
21 static BOOL
22 InitUxTheme(VOID)
23 {
24 if (hUxTheme) return TRUE;
25
26 hUxTheme = LoadLibraryW(L"uxtheme.dll");
27 if (hUxTheme == NULL) return FALSE;
28
29 fnEnableThemeDialogTexture =
30 (ETDTProc)GetProcAddress(hUxTheme, "EnableThemeDialogTexture");
31 fnSetWindowTheme =
32 (SWTProc)GetProcAddress(hUxTheme, "SetWindowTheme");
33
34 return TRUE;
35 }
36
37 #if 0
38 static VOID
39 CleanupUxTheme(VOID)
40 {
41 FreeLibrary(hUxTheme);
42 hUxTheme = NULL;
43 }
44 #endif
45
46
47 ////////////////////////////////////////////////////////////////////////////////
48 // Taken from WinSpy++ 1.7
49 // http://www.catch22.net/software/winspy
50 // Copyright (c) 2002 by J Brown
51 //
52
53 HRESULT
54 WINAPI
55 EnableThemeDialogTexture(_In_ HWND hwnd,
56 _In_ DWORD dwFlags)
57 {
58 if (!InitUxTheme())
59 return HRESULT_FROM_WIN32(GetLastError());
60
61 if (!fnEnableThemeDialogTexture)
62 return HRESULT_FROM_WIN32(GetLastError());
63
64 return fnEnableThemeDialogTexture(hwnd, dwFlags);
65 }
66
67 HRESULT
68 WINAPI
69 SetWindowTheme(_In_ HWND hwnd,
70 _In_ LPCWSTR pszSubAppName,
71 _In_ LPCWSTR pszSubIdList)
72 {
73 if (!InitUxTheme())
74 return HRESULT_FROM_WIN32(GetLastError());
75
76 if (!fnSetWindowTheme)
77 return HRESULT_FROM_WIN32(GetLastError());
78
79 return fnSetWindowTheme(hwnd, pszSubAppName, pszSubIdList);
80 }