ReactOS  0.4.15-dev-1389-g828d5fa
desk.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS Display Control Panel
4  * FILE: dll/cpl/desk/desk.c
5  * PURPOSE: ReactOS Display Control Panel
6  *
7  * PROGRAMMERS: Trevor McCort (lycan359@gmail.com)
8  */
9 
10 #include "desk.h"
11 #include <shellapi.h>
12 #include <cplext.h>
13 #include <debug.h>
14 
15 #define NUM_APPLETS (1)
16 
18 
25 
28 
29 /* Applets */
31 {
32  {
37  }
38 };
39 
40 HMENU
42  IN LPCTSTR lpMenuName)
43 {
44  HMENU hMenu, hSubMenu = NULL;
45 
46  hMenu = LoadMenu(hInstance,
47  lpMenuName);
48 
49  if (hMenu != NULL)
50  {
51  hSubMenu = GetSubMenu(hMenu,
52  0);
53  if (hSubMenu != NULL &&
54  !RemoveMenu(hMenu,
55  0,
57  {
58  hSubMenu = NULL;
59  }
60 
61  DestroyMenu(hMenu);
62  }
63 
64  return hSubMenu;
65 }
66 
67 static BOOL CALLBACK
69 {
71  if (ppsh != NULL && ppsh->nPages < MAX_DESK_PAGES)
72  {
73  ppsh->phpage[ppsh->nPages++] = hpage;
74  return TRUE;
75  }
76 
77  return FALSE;
78 }
79 
80 static BOOL
82 {
83  HPROPSHEETPAGE hPage;
84  PROPSHEETPAGE psp;
85 
86  if (ppsh->nPages < MAX_DESK_PAGES)
87  {
88  ZeroMemory(&psp, sizeof(psp));
89  psp.dwSize = sizeof(psp);
90  psp.dwFlags = PSP_DEFAULT;
91  if (pfnCallback != NULL)
92  psp.dwFlags |= PSP_USECALLBACK;
93  psp.hInstance = hApplet;
94  psp.pszTemplate = MAKEINTRESOURCE(idDlg);
95  psp.pfnDlgProc = DlgProc;
96  psp.pfnCallback = pfnCallback;
97 
98  hPage = CreatePropertySheetPage(&psp);
99  if (hPage != NULL)
100  {
101  return DisplayAppletPropSheetAddPage(hPage, (LPARAM)ppsh);
102  }
103  }
104 
105  return FALSE;
106 }
107 
108 static const struct
109 {
114 } PropPages[] =
115 {
116  /* { IDD_THEMES, ThemesPageProc, NULL, L"Themes" }, */ /* TODO: */
117  { IDD_BACKGROUND, BackgroundPageProc, NULL, L"Desktop" },
118  { IDD_SCREENSAVER, ScreenSaverPageProc, NULL, L"Screen Saver" },
119  { IDD_APPEARANCE, AppearancePageProc, NULL, L"Appearance" },
121 };
122 
123 static int CALLBACK
125 {
126  // NOTE: This callback is needed to set large icon correctly.
127  HICON hIcon;
128  switch (uMsg)
129  {
130  case PSCB_INITIALIZED:
131  {
133  SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
134  break;
135  }
136  }
137  return 0;
138 }
139 
140 /* Display Applet */
141 static LONG APIENTRY
143 {
145  PROPSHEETHEADER psh;
146  HPSXA hpsxa = NULL;
147  TCHAR Caption[1024];
148  UINT i;
149  LPWSTR *argv = NULL;
150  LPCWSTR pwszSelectedTab = NULL;
151  LPCWSTR pwszFile = NULL;
152  LPCWSTR pwszAction = NULL;
153  INT nPage = 0;
154 
156 
157  hCPLWindow = hwnd;
158 
159  if (uMsg == CPL_STARTWPARMSW && lParam)
160  {
161  int argc;
162  int i;
163 
164  nPage = _wtoi((PWSTR)lParam);
165 
166 #if 0
168 #else
170 #endif
171 
172  if (argv && argc)
173  {
174  for (i = 0; i<argc; i++)
175  {
176 #if 0
177  if (argv[i][0] == L'@')
178  pwszSelectedTab = &argv[i][1];
179 #else
180  if (wcsncmp(argv[i], L"desk,@", 6) == 0)
181  pwszSelectedTab = &argv[i][6];
182 #endif
183  else if (wcsncmp(argv[i], L"/Action:", 8) == 0)
184  pwszAction = &argv[i][8];
185  else if (wcsncmp(argv[i], L"/file:", 6) == 0)
186  pwszFile = &argv[i][6];
187  }
188  }
189  }
190 
191  if(pwszAction && wcsncmp(pwszAction, L"ActivateMSTheme", 15) == 0)
192  {
193  ActivateThemeFile(pwszFile);
194  goto cleanup;
195  }
196 
197  g_GlobalData.pwszFile = pwszFile;
198  g_GlobalData.pwszAction = pwszAction;
200 
201  LoadString(hApplet, IDS_CPLNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
202 
203  ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
204  psh.dwSize = sizeof(PROPSHEETHEADER);
205  psh.dwFlags = PSH_USECALLBACK | PSH_PROPTITLE | PSH_USEICONID;
206  psh.hwndParent = hCPLWindow;
207  psh.hInstance = hApplet;
208  psh.pszIcon = MAKEINTRESOURCEW(IDC_DESK_ICON);
209  psh.pszCaption = Caption;
210  psh.nPages = 0;
211  psh.nStartPage = 0;
212  psh.phpage = hpsp;
213  psh.pfnCallback = PropSheetProc;
214 
215  /* Allow shell extensions to replace the background page */
217 
218  for (i = 0; i != sizeof(PropPages) / sizeof(PropPages[0]); i++)
219  {
220  if (pwszSelectedTab && wcsicmp(pwszSelectedTab, PropPages[i].Name) == 0)
221  psh.nStartPage = i;
222 
223  /* Override the background page if requested by a shell extension */
224  if (PropPages[i].idDlg == IDD_BACKGROUND && hpsxa != NULL &&
226  {
227  /* The shell extension added one or more pages to replace the background page.
228  Don't create the built-in page anymore! */
229  continue;
230  }
231 
233  }
234 
235  /* NOTE: Don't call SHAddFromPropSheetExtArray here because this applet only allows
236  replacing the background page but not extending the applet by more pages */
237 
238  if (nPage != 0 && psh.nStartPage == 0)
239  psh.nStartPage = nPage;
240 
241  PropertySheet(&psh);
242 
243 cleanup:
244  if (hpsxa != NULL)
246 
247  if (argv)
248  LocalFree(argv);
249 
250  return TRUE;
251 }
252 
253 
254 /* Control Panel Callback */
256 CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
257 {
258  int i = (int)lParam1;
259 
260  switch (uMsg)
261  {
262  case CPL_INIT:
263  return TRUE;
264 
265  case CPL_GETCOUNT:
266  return NUM_APPLETS;
267 
268  case CPL_INQUIRE:
269  {
270  CPLINFO *CPlInfo = (CPLINFO*)lParam2;
271  CPlInfo->lData = 0;
272  CPlInfo->idIcon = Applets[i].idIcon;
273  CPlInfo->idName = Applets[i].idName;
274  CPlInfo->idInfo = Applets[i].idDescription;
275  }
276  break;
277 
278  case CPL_DBLCLK:
279  Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
280  break;
281 
282  case CPL_STARTWPARMSW:
283  return Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
284  }
285 
286  return FALSE;
287 }
288 
289 void
290 WINAPI
292  IN HWND hWindow,
294  IN LPCWSTR pszFile,
295  IN UINT nCmdShow)
296 {
297  WCHAR pszSystemDir[MAX_PATH];
298  WCHAR pszDrive[3];
299  WCHAR pszPath[MAX_PATH];
300  WCHAR pszFilename[MAX_PATH];
301  WCHAR pszExt[MAX_PATH];
302  LPWSTR pszOutName;
303  UINT uCompressionType=FILE_COMPRESSION_NONE;
304  DWORD dwSourceSize;
305  DWORD dwTargetSize;
306  DWORD rc;
307 
308  if (!pszFile)
309  {
310  DPRINT("InstallScreenSaver() null file\n");
312  return;
313  }
314  DPRINT("InstallScreenSaver() Installing screensaver %ls\n", pszFile);
315 
316  rc = SetupGetFileCompressionInfoW(pszFile, &pszOutName, &dwSourceSize, &dwTargetSize, &uCompressionType);
317  if (ERROR_SUCCESS != rc)
318  {
319  DPRINT("InstallScreenSaver() SetupGetFileCompressionInfo failed with error 0x%lx\n", rc);
320  SetLastError(rc);
321  return;
322  }
323  if (!GetSystemDirectoryW((LPWSTR)pszSystemDir, sizeof(pszSystemDir)/sizeof(WCHAR)))
324  {
325  MyFree(pszOutName);
326  DPRINT("InstallScreenSaver() GetSystemDirectory failed with error 0x%lx\n", GetLastError());
327  return;
328  }
329  _wsplitpath(pszOutName, pszDrive, pszPath, pszFilename, pszExt);
330  MyFree(pszOutName);
331  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), L"\\");
332  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), pszFilename);
333  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), pszExt);
334  rc = SetupDecompressOrCopyFileW(pszFile, pszSystemDir, &uCompressionType);
335  DPRINT("InstallScreenSaver() Copying to %ls, compression type %d return 0x%lx\n", pszFile, uCompressionType, rc);
336 }
337 
338 void
339 WINAPI
341  IN HWND hWindow,
343  IN LPCSTR pszFile,
344  IN UINT nCmdShow)
345 {
346  LPWSTR lpwString;
347 
348  if (!pszFile)
349  {
350  DPRINT("InstallScreenSaver() null file\n");
352  return;
353  }
354  DPRINT("InstallScreenSaver() Install from file %s\n", pszFile);
355  lpwString = pSetupMultiByteToUnicode(pszFile, 0);
356  if (!lpwString)
357  {
358  DPRINT("InstallScreenSaver() not enough memory to convert string to unicode\n");
360  return;
361  }
362  InstallScreenSaverW(hWindow, hInstance, lpwString, nCmdShow);
363  MyFree(lpwString);
364 }
365 
366 BOOL WINAPI
368 {
370 
371  switch (dwReason)
372  {
373  case DLL_PROCESS_ATTACH:
375  RegisterPreviewControl(hInstDLL);
376 // case DLL_THREAD_ATTACH:
377  hApplet = hInstDLL;
378  break;
379 
380  case DLL_PROCESS_DETACH:
381  UnregisterPreviewControl(hInstDLL);
382  CoUninitialize();
383  break;
384  }
385 
386  return TRUE;
387 }
void _wsplitpath(const WCHAR *path, WCHAR *drv, WCHAR *dir, WCHAR *name, WCHAR *ext)
Definition: splitpath.c:22
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
void WINAPI SHDestroyPropSheetExtArray(HPSXA hpsxa)
Definition: shellord.c:2162
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static int argc
Definition: ServiceArgs.c:12
WORD idDlg
Definition: desk.c:110
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define IN
Definition: typedefs.h:39
INT_PTR CALLBACK ScreenSaverPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: screensaver.c:692
static HICON
Definition: imagelist.c:84
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
Definition: cpl.h:24
UINT CALLBACK SettingsPageCallbackProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
Definition: settings.c:647
void WINAPI InstallScreenSaverA(IN HWND hWindow, IN HANDLE hInstance, IN LPCSTR pszFile, IN UINT nCmdShow)
Definition: desk.c:340
#define ERROR_SUCCESS
Definition: deptool.c:10
HWND hCPLWindow
Definition: desk.c:27
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define IDD_SETTINGS
Definition: resource.h:13
#define MAX_DESK_PAGES
Definition: desk.h:66
BOOL ActivateThemeFile(LPCWSTR pwszFile)
Definition: theme.c:1014
#define TRUE
Definition: types.h:120
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
uint16_t * PWSTR
Definition: typedefs.h:56
#define FILE_COMPRESSION_NONE
Definition: setupapi.h:351
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
COLORREF desktop_color
Definition: desk.h:106
int idName
Definition: hotplug.h:36
#define REGSTR_PATH_CONTROLSFOLDER
Definition: regstr.h:76
int idIcon
Definition: hotplug.h:35
#define CALLBACK
Definition: compat.h:35
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD dwReason, LPVOID lpvReserved)
Definition: desk.c:367
int idInfo
Definition: cpl.h:27
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
#define ZeroMemory
Definition: winbase.h:1648
LPCWSTR pwszAction
Definition: desk.h:108
#define COLOR_DESKTOP
Definition: winuser.h:904
#define IDD_APPEARANCE
Definition: resource.h:12
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define PSP_USECALLBACK
Definition: prsht.h:30
UINT_PTR WPARAM
Definition: windef.h:207
static BOOL CALLBACK DisplayAppletPropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam)
Definition: desk.c:68
static BOOL InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc, LPFNPSPCALLBACK pfnCallback)
Definition: desk.c:81
int32_t INT_PTR
Definition: typedefs.h:64
#define PSH_USECALLBACK
Definition: prsht.h:48
#define argv
Definition: mplay32.c:18
#define IDD_BACKGROUND
Definition: resource.h:10
int32_t INT
Definition: typedefs.h:58
DWORD WINAPI GetSysColor(_In_ int)
WPARAM wParam
Definition: combotst.c:138
LONG CALLBACK CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
Definition: desk.c:256
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
static IN DWORD IN LPVOID lpvReserved
int idIcon
Definition: cpl.h:25
int idDescription
Definition: hotplug.h:37
#define CPL_DBLCLK
Definition: cpl.h:16
DWORD dwReason
Definition: misc.cpp:154
HINSTANCE hInstance
Definition: charmap.c:20
#define IDS_CPLNAME
Definition: resource.h:8
#define PSH_USEICONID
Definition: prsht.h:42
#define IDD_SCREENSAVER
Definition: resource.h:11
#define FALSE
Definition: types.h:117
LPWSTR WINAPI pSetupMultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage)
Definition: misc.c:281
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
LPWSTR WINAPI GetCommandLineW(VOID)
Definition: proc.c:2015
#define MF_BYPOSITION
Definition: winuser.h:203
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
HMENU LoadPopupMenu(IN HINSTANCE hInstance, IN LPCTSTR lpMenuName)
Definition: desk.c:41
LPWSTR *WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int *numargs)
Definition: shell32_main.c:79
LPFNPSPCALLBACK Callback
Definition: desk.c:112
#define LPPROPSHEETPAGE
Definition: prsht.h:390
#define PROPSHEETHEADER
Definition: prsht.h:392
static int CALLBACK PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
Definition: desk.c:124
VOID UnregisterPreviewControl(IN HINSTANCE hInstance)
Definition: preview.c:555
LONG_PTR LPARAM
Definition: windef.h:208
void DPRINT(...)
Definition: polytest.cpp:61
LPCWSTR pwszFile
Definition: desk.h:107
#define IDC_DESK_ICON
Definition: resource.h:4
const char * LPCSTR
Definition: xmlstorage.h:183
DWORD WINAPI SetupDecompressOrCopyFileW(PCWSTR source, PCWSTR target, PUINT type)
Definition: misc.c:1690
#define CreatePropertySheetPage
Definition: prsht.h:399
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define IDS_CPLDESCRIPTION
Definition: resource.h:9
char TCHAR
Definition: xmlstorage.h:189
#define PSP_DEFAULT
Definition: prsht.h:22
void WINAPI InstallScreenSaverW(IN HWND hWindow, IN HANDLE hInstance, IN LPCWSTR pszFile, IN UINT nCmdShow)
Definition: desk.c:291
if(!(yy_init))
Definition: macro.lex.yy.c:714
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define PSH_PROPTITLE
Definition: prsht.h:40
APPLET_PROC AppletProc
Definition: hotplug.h:38
HINSTANCE hApplet
Definition: desk.c:26
#define MAX_PATH
Definition: compat.h:34
#define WINAPI
Definition: msvc.h:6
DWORD WINAPI SetupGetFileCompressionInfoW(PCWSTR source, PWSTR *name, PDWORD source_size, PDWORD target_size, PUINT type)
Definition: misc.c:1555
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:611
#define CPL_STARTWPARMSW
Definition: cpl.h:21
_Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
#define CPL_INIT
Definition: cpl.h:12
#define wcsicmp
Definition: compat.h:15
static const struct @203 PropPages[]
APPLET Applets[NUM_APPLETS]
Definition: desk.c:30
#define CPL_INQUIRE
Definition: cpl.h:14
static const WCHAR L[]
Definition: oid.c:1250
LONG_PTR lData
Definition: cpl.h:28
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
int idName
Definition: cpl.h:26
LPWSTR Name
Definition: desk.c:113
BOOL WINAPI DestroyMenu(_In_ HMENU)
INT_PTR(CALLBACK * DLGPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2871
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
Definition: wdfinterrupt.h:456
#define TEXT(s)
Definition: k32.h:26
#define CPLPAGE_DISPLAY_BACKGROUND
Definition: cplext.h:8
#define PSCB_INITIALIZED
Definition: prsht.h:75
#define LoadMenu
Definition: winuser.h:5792
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HICON hIcon
Definition: msconfig.c:44
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2312
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam)
Definition: shellord.c:2131
static LONG APIENTRY DisplayApplet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam)
Definition: desk.c:142
INT_PTR CALLBACK BackgroundPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: background.c:1170
#define PropertySheet
Definition: prsht.h:400
GLOBAL_DATA g_GlobalData
Definition: background.c:84
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2044
char * cleanup(char *str)
Definition: wpickclick.c:99
#define NUM_APPLETS
Definition: desk.c:15
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)
Definition: shellord.c:2014
WCHAR * LPWSTR
Definition: xmlstorage.h:184
INT_PTR CALLBACK SettingsPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define LPFNPSPCALLBACK
Definition: prsht.h:388
VOID WINAPI MyFree(LPVOID lpMem)
Definition: misc.c:128
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: appearance.c:216
LPARAM lParam
Definition: combotst.c:139
DLGPROC DlgProc
Definition: desk.c:111
#define CPL_GETCOUNT
Definition: cpl.h:13
#define LoadString
Definition: winuser.h:5794
#define PROPSHEETPAGE
Definition: prsht.h:389
#define APIENTRY
Definition: api.h:79
INT_PTR CALLBACK ThemesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: theme.c:1064
#define ICON_BIG
Definition: tnclass.cpp:51
Definition: hotplug.h:33
BOOL RegisterPreviewControl(IN HINSTANCE hInstance)
Definition: preview.c:539
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12