ReactOS  0.4.15-dev-5463-g138eb58
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  UINT i;
148  LPWSTR *argv = NULL;
149  LPCWSTR pwszSelectedTab = NULL;
150  LPCWSTR pwszFile = NULL;
151  LPCWSTR pwszAction = NULL;
152  INT nPage = 0;
153  BITMAP bitmap;
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  /* Initialize the monitor preview bitmap, used on multiple pages */
204  {
206 
207  g_GlobalData.bmMonWidth = bitmap.bmWidth;
208  g_GlobalData.bmMonHeight = bitmap.bmHeight;
209  }
210 
211  ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
212  psh.dwSize = sizeof(PROPSHEETHEADER);
213  psh.dwFlags = PSH_USECALLBACK | PSH_PROPTITLE | PSH_USEICONID;
214  psh.hwndParent = hCPLWindow;
215  psh.hInstance = hApplet;
216  psh.pszIcon = MAKEINTRESOURCEW(IDC_DESK_ICON);
217  psh.pszCaption = MAKEINTRESOURCEW(IDS_CPLNAME);
218  psh.nPages = 0;
219  psh.nStartPage = 0;
220  psh.phpage = hpsp;
221  psh.pfnCallback = PropSheetProc;
222 
223  /* Allow shell extensions to replace the background page */
225 
226  for (i = 0; i != sizeof(PropPages) / sizeof(PropPages[0]); i++)
227  {
228  if (pwszSelectedTab && wcsicmp(pwszSelectedTab, PropPages[i].Name) == 0)
229  psh.nStartPage = i;
230 
231  /* Override the background page if requested by a shell extension */
232  if (PropPages[i].idDlg == IDD_BACKGROUND && hpsxa != NULL &&
234  {
235  /* The shell extension added one or more pages to replace the background page.
236  Don't create the built-in page anymore! */
237  continue;
238  }
239 
241  }
242 
243  /* NOTE: Don't call SHAddFromPropSheetExtArray here because this applet only allows
244  replacing the background page but not extending the applet by more pages */
245 
246  if (nPage != 0 && psh.nStartPage == 0)
247  psh.nStartPage = nPage;
248 
249  PropertySheet(&psh);
250 
251 cleanup:
253 
254  if (hpsxa != NULL)
256 
257  if (argv)
258  LocalFree(argv);
259 
260  return TRUE;
261 }
262 
263 
264 /* Control Panel Callback */
266 CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
267 {
268  UINT i = (UINT)lParam1;
269 
270  switch (uMsg)
271  {
272  case CPL_INIT:
273  return TRUE;
274 
275  case CPL_GETCOUNT:
276  return NUM_APPLETS;
277 
278  case CPL_INQUIRE:
279  if (i < NUM_APPLETS)
280  {
281  CPLINFO *CPlInfo = (CPLINFO*)lParam2;
282  CPlInfo->lData = 0;
283  CPlInfo->idIcon = Applets[i].idIcon;
284  CPlInfo->idName = Applets[i].idName;
285  CPlInfo->idInfo = Applets[i].idDescription;
286  }
287  else
288  {
289  return TRUE;
290  }
291  break;
292 
293  case CPL_DBLCLK:
294  if (i < NUM_APPLETS)
295  Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
296  else
297  return TRUE;
298  break;
299 
300  case CPL_STARTWPARMSW:
301  if (i < NUM_APPLETS)
302  return Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
303  break;
304  }
305 
306  return FALSE;
307 }
308 
309 void
310 WINAPI
312  IN HWND hWindow,
314  IN LPCWSTR pszFile,
315  IN UINT nCmdShow)
316 {
317  WCHAR pszSystemDir[MAX_PATH];
318  WCHAR pszDrive[3];
319  WCHAR pszPath[MAX_PATH];
320  WCHAR pszFilename[MAX_PATH];
321  WCHAR pszExt[MAX_PATH];
322  LPWSTR pszOutName;
323  UINT uCompressionType=FILE_COMPRESSION_NONE;
324  DWORD dwSourceSize;
325  DWORD dwTargetSize;
326  DWORD rc;
327 
328  if (!pszFile)
329  {
330  DPRINT("InstallScreenSaver() null file\n");
332  return;
333  }
334  DPRINT("InstallScreenSaver() Installing screensaver %ls\n", pszFile);
335 
336  rc = SetupGetFileCompressionInfoW(pszFile, &pszOutName, &dwSourceSize, &dwTargetSize, &uCompressionType);
337  if (ERROR_SUCCESS != rc)
338  {
339  DPRINT("InstallScreenSaver() SetupGetFileCompressionInfo failed with error 0x%lx\n", rc);
340  SetLastError(rc);
341  return;
342  }
343  if (!GetSystemDirectoryW((LPWSTR)pszSystemDir, sizeof(pszSystemDir)/sizeof(WCHAR)))
344  {
345  MyFree(pszOutName);
346  DPRINT("InstallScreenSaver() GetSystemDirectory failed with error 0x%lx\n", GetLastError());
347  return;
348  }
349  _wsplitpath(pszOutName, pszDrive, pszPath, pszFilename, pszExt);
350  MyFree(pszOutName);
351  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), L"\\");
352  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), pszFilename);
353  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), pszExt);
354  rc = SetupDecompressOrCopyFileW(pszFile, pszSystemDir, &uCompressionType);
355  DPRINT("InstallScreenSaver() Copying to %ls, compression type %d return 0x%lx\n", pszFile, uCompressionType, rc);
356 }
357 
358 void
359 WINAPI
361  IN HWND hWindow,
363  IN LPCSTR pszFile,
364  IN UINT nCmdShow)
365 {
366  LPWSTR lpwString;
367 
368  if (!pszFile)
369  {
370  DPRINT("InstallScreenSaver() null file\n");
372  return;
373  }
374  DPRINT("InstallScreenSaver() Install from file %s\n", pszFile);
375  lpwString = pSetupMultiByteToUnicode(pszFile, 0);
376  if (!lpwString)
377  {
378  DPRINT("InstallScreenSaver() not enough memory to convert string to unicode\n");
380  return;
381  }
382  InstallScreenSaverW(hWindow, hInstance, lpwString, nCmdShow);
383  MyFree(lpwString);
384 }
385 
386 BOOL WINAPI
388 {
390 
391  switch (dwReason)
392  {
393  case DLL_PROCESS_ATTACH:
395  RegisterPreviewControl(hInstDLL);
396 // case DLL_THREAD_ATTACH:
397  hApplet = hInstDLL;
398  break;
399 
400  case DLL_PROCESS_DETACH:
401  UnregisterPreviewControl(hInstDLL);
402  CoUninitialize();
403  break;
404  }
405 
406  return TRUE;
407 }
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:2150
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:799
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:689
void WINAPI InstallScreenSaverA(IN HWND hWindow, IN HANDLE hInstance, IN LPCSTR pszFile, IN UINT nCmdShow)
Definition: desk.c:360
#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:81
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:356
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
COLORREF desktop_color
Definition: desk.h:159
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:387
int idInfo
Definition: cpl.h:27
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define ZeroMemory
Definition: winbase.h:1670
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
LPCWSTR pwszAction
Definition: desk.h:161
#define COLOR_DESKTOP
Definition: winuser.h:908
#define IDD_APPEARANCE
Definition: resource.h:12
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define PSP_USECALLBACK
Definition: prsht.h:30
LONG bmMonHeight
Definition: desk.h:164
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
if(dx==0 &&dy==0)
Definition: linetemp.h:174
#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:266
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:19
#define IDS_CPLNAME
Definition: resource.h:8
#define L(x)
Definition: ntvdm.h:50
#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:2014
#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:80
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
HBITMAP hMonitorBitmap
Definition: desk.h:162
VOID UnregisterPreviewControl(IN HINSTANCE hInstance)
Definition: preview.c:555
LONG_PTR LPARAM
Definition: windef.h:208
LPCWSTR pwszFile
Definition: desk.h:160
#define IDC_MONITOR
Definition: resource.h:29
#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
Definition: uimain.c:88
#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:311
static const struct @207 PropPages[]
__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:752
LONG bmMonWidth
Definition: desk.h:163
#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
APPLET Applets[NUM_APPLETS]
Definition: desk.c:30
#define CPL_INQUIRE
Definition: cpl.h:14
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:2886
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
Definition: wdfinterrupt.h:456
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#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:5807
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
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2132
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)
Definition: bl.h:1330
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2313
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:2119
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:1179
#define PropertySheet
Definition: prsht.h:400
GLOBAL_DATA g_GlobalData
Definition: background.c:70
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
static HBITMAP bitmap
Definition: clipboard.c:1344
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)
Definition: shellord.c:2003
#define DPRINT
Definition: sndvol32.h:71
WCHAR * LPWSTR
Definition: xmlstorage.h:184
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4022
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 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
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12