ReactOS  0.4.14-dev-98-gb0d4763
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 
24 
27 
28 /* Applets */
30 {
31  {
36  }
37 };
38 
39 HMENU
41  IN LPCTSTR lpMenuName)
42 {
43  HMENU hMenu, hSubMenu = NULL;
44 
45  hMenu = LoadMenu(hInstance,
46  lpMenuName);
47 
48  if (hMenu != NULL)
49  {
50  hSubMenu = GetSubMenu(hMenu,
51  0);
52  if (hSubMenu != NULL &&
53  !RemoveMenu(hMenu,
54  0,
56  {
57  hSubMenu = NULL;
58  }
59 
60  DestroyMenu(hMenu);
61  }
62 
63  return hSubMenu;
64 }
65 
66 static BOOL CALLBACK
68 {
70  if (ppsh != NULL && ppsh->nPages < MAX_DESK_PAGES)
71  {
72  ppsh->phpage[ppsh->nPages++] = hpage;
73  return TRUE;
74  }
75 
76  return FALSE;
77 }
78 
79 static BOOL
81 {
82  HPROPSHEETPAGE hPage;
83  PROPSHEETPAGE psp;
84 
85  if (ppsh->nPages < MAX_DESK_PAGES)
86  {
87  ZeroMemory(&psp, sizeof(psp));
88  psp.dwSize = sizeof(psp);
89  psp.dwFlags = PSP_DEFAULT;
90  if (pfnCallback != NULL)
91  psp.dwFlags |= PSP_USECALLBACK;
92  psp.hInstance = hApplet;
93  psp.pszTemplate = MAKEINTRESOURCE(idDlg);
94  psp.pfnDlgProc = DlgProc;
95  psp.pfnCallback = pfnCallback;
96 
97  hPage = CreatePropertySheetPage(&psp);
98  if (hPage != NULL)
99  {
100  return DisplayAppletPropSheetAddPage(hPage, (LPARAM)ppsh);
101  }
102  }
103 
104  return FALSE;
105 }
106 
107 static const struct
108 {
113 } PropPages[] =
114 {
115  { IDD_BACKGROUND, BackgroundPageProc, NULL, L"Desktop" },
116  { IDD_SCREENSAVER, ScreenSaverPageProc, NULL, L"Screen Saver" },
117  { IDD_APPEARANCE, AppearancePageProc, NULL, L"Appearance" },
119 };
120 
121 static int CALLBACK
123 {
124  // NOTE: This callback is needed to set large icon correctly.
125  HICON hIcon;
126  switch (uMsg)
127  {
128  case PSCB_INITIALIZED:
129  {
131  SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
132  break;
133  }
134  }
135  return 0;
136 }
137 
138 /* Display Applet */
139 static LONG APIENTRY
141 {
143  PROPSHEETHEADER psh;
144  HPSXA hpsxa = NULL;
145  TCHAR Caption[1024];
146  UINT i;
147  LPWSTR *argv = NULL;
148  LPCWSTR pwszSelectedTab = NULL;
149  LPCWSTR pwszFile = NULL;
150  LPCWSTR pwszAction = NULL;
151 
153 
154  hCPLWindow = hwnd;
155 
156  if (uMsg == CPL_STARTWPARMSW && lParam)
157  {
158  int argc;
159  int i;
160 
161 #if 0
163 #else
165 #endif
166 
167  if (argv && argc)
168  {
169  for (i = 0; i<argc; i++)
170  {
171 #if 0
172  if (argv[i][0] == L'@')
173  pwszSelectedTab = &argv[i][1];
174 #else
175  if (wcsncmp(argv[i], L"desk,@", 6) == 0)
176  pwszSelectedTab = &argv[i][6];
177 #endif
178  else if (wcsncmp(argv[i], L"/Action:", 8) == 0)
179  pwszAction = &argv[i][8];
180  else if (wcsncmp(argv[i], L"/file:", 6) == 0)
181  pwszFile = &argv[i][6];
182  }
183  }
184  }
185 
186  if(pwszAction && wcsncmp(pwszAction, L"ActivateMSTheme", 15) == 0)
187  {
188  ActivateThemeFile(pwszFile);
189  goto cleanup;
190  }
191 
192  g_GlobalData.pwszFile = pwszFile;
193  g_GlobalData.pwszAction = pwszAction;
195 
196  LoadString(hApplet, IDS_CPLNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
197 
198  ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
199  psh.dwSize = sizeof(PROPSHEETHEADER);
200  psh.dwFlags = PSH_USECALLBACK | PSH_PROPTITLE | PSH_USEICONID;
201  psh.hwndParent = hCPLWindow;
202  psh.hInstance = hApplet;
203  psh.pszIcon = MAKEINTRESOURCEW(IDC_DESK_ICON);
204  psh.pszCaption = Caption;
205  psh.nPages = 0;
206  psh.nStartPage = 0;
207  psh.phpage = hpsp;
208  psh.pfnCallback = PropSheetProc;
209 
210  /* Allow shell extensions to replace the background page */
212 
213  for (i = 0; i != sizeof(PropPages) / sizeof(PropPages[0]); i++)
214  {
215  if (pwszSelectedTab && wcsicmp(pwszSelectedTab, PropPages[i].Name) == 0)
216  psh.nStartPage = i;
217 
218  /* Override the background page if requested by a shell extension */
219  if (PropPages[i].idDlg == IDD_BACKGROUND && hpsxa != NULL &&
221  {
222  /* The shell extension added one or more pages to replace the background page.
223  Don't create the built-in page anymore! */
224  continue;
225  }
226 
228  }
229 
230  /* NOTE: Don't call SHAddFromPropSheetExtArray here because this applet only allows
231  replacing the background page but not extending the applet by more pages */
232 
233  PropertySheet(&psh);
234 
235 cleanup:
236  if (hpsxa != NULL)
238 
239  if (argv)
240  LocalFree(argv);
241 
242  return TRUE;
243 }
244 
245 
246 /* Control Panel Callback */
248 CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
249 {
250  int i = (int)lParam1;
251 
252  switch (uMsg)
253  {
254  case CPL_INIT:
255  return TRUE;
256 
257  case CPL_GETCOUNT:
258  return NUM_APPLETS;
259 
260  case CPL_INQUIRE:
261  {
262  CPLINFO *CPlInfo = (CPLINFO*)lParam2;
263  CPlInfo->lData = 0;
264  CPlInfo->idIcon = Applets[i].idIcon;
265  CPlInfo->idName = Applets[i].idName;
266  CPlInfo->idInfo = Applets[i].idDescription;
267  }
268  break;
269 
270  case CPL_DBLCLK:
271  Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
272  break;
273  case CPL_STARTWPARMSW:
274  return Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
275  }
276 
277  return FALSE;
278 }
279 
280 void
281 WINAPI
283  IN HWND hWindow,
285  IN LPCWSTR pszFile,
286  IN UINT nCmdShow)
287 {
288  WCHAR pszSystemDir[MAX_PATH];
289  WCHAR pszDrive[3];
290  WCHAR pszPath[MAX_PATH];
291  WCHAR pszFilename[MAX_PATH];
292  WCHAR pszExt[MAX_PATH];
293  LPWSTR pszOutName;
294  UINT uCompressionType=FILE_COMPRESSION_NONE;
295  DWORD dwSourceSize;
296  DWORD dwTargetSize;
297  DWORD rc;
298 
299  if (!pszFile)
300  {
301  DPRINT("InstallScreenSaver() null file\n");
303  return;
304  }
305  DPRINT("InstallScreenSaver() Installing screensaver %ls\n", pszFile);
306 
307  rc = SetupGetFileCompressionInfoW(pszFile, &pszOutName, &dwSourceSize, &dwTargetSize, &uCompressionType);
308  if (ERROR_SUCCESS != rc)
309  {
310  DPRINT("InstallScreenSaver() SetupGetFileCompressionInfo failed with error 0x%lx\n", rc);
311  SetLastError(rc);
312  return;
313  }
314  if (!GetSystemDirectoryW((LPWSTR)pszSystemDir, sizeof(pszSystemDir)/sizeof(WCHAR)))
315  {
316  MyFree(pszOutName);
317  DPRINT("InstallScreenSaver() GetSystemDirectory failed with error 0x%lx\n", GetLastError());
318  return;
319  }
320  _wsplitpath(pszOutName, pszDrive, pszPath, pszFilename, pszExt);
321  MyFree(pszOutName);
322  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), L"\\");
323  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), pszFilename);
324  StringCbCatW(pszSystemDir, sizeof(pszSystemDir), pszExt);
325  rc = SetupDecompressOrCopyFileW(pszFile, pszSystemDir, &uCompressionType);
326  DPRINT("InstallScreenSaver() Copying to %ls, compression type %d return 0x%lx\n", pszFile, uCompressionType, rc);
327 }
328 
329 void
330 WINAPI
332  IN HWND hWindow,
334  IN LPCSTR pszFile,
335  IN UINT nCmdShow)
336 {
337  LPWSTR lpwString;
338 
339  if (!pszFile)
340  {
341  DPRINT("InstallScreenSaver() null file\n");
343  return;
344  }
345  DPRINT("InstallScreenSaver() Install from file %s\n", pszFile);
346  lpwString = pSetupMultiByteToUnicode(pszFile, 0);
347  if (!lpwString)
348  {
349  DPRINT("InstallScreenSaver() not enough memory to convert string to unicode\n");
351  return;
352  }
353  InstallScreenSaverW(hWindow, hInstance, lpwString, nCmdShow);
354  MyFree(lpwString);
355 }
356 
357 BOOL WINAPI
359 {
361 
362  switch (dwReason)
363  {
364  case DLL_PROCESS_ATTACH:
366  RegisterPreviewControl(hInstDLL);
367 // case DLL_THREAD_ATTACH:
368  hApplet = hInstDLL;
369  break;
370 
371  case DLL_PROCESS_DETACH:
372  UnregisterPreviewControl(hInstDLL);
373  CoUninitialize();
374  break;
375  }
376 
377  return TRUE;
378 }
void _wsplitpath(const WCHAR *path, WCHAR *drv, WCHAR *dir, WCHAR *name, WCHAR *ext)
Definition: splitpath.c:22
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
void WINAPI SHDestroyPropSheetExtArray(HPSXA hpsxa)
Definition: shellord.c:1755
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static int argc
Definition: ServiceArgs.c:12
WORD idDlg
Definition: desk.c:109
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define IN
Definition: typedefs.h:38
INT_PTR CALLBACK ScreenSaverPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: screensaver.c:692
static HICON
Definition: imagelist.c:84
#define TRUE
Definition: types.h:120
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
Definition: cpl.h:24
UINT CALLBACK SettingsPageCallbackProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
Definition: settings.c:643
void WINAPI InstallScreenSaverA(IN HWND hWindow, IN HANDLE hInstance, IN LPCSTR pszFile, IN UINT nCmdShow)
Definition: desk.c:331
#define ERROR_SUCCESS
Definition: deptool.c:10
HWND hCPLWindow
Definition: desk.c:26
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 UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
#define FILE_COMPRESSION_NONE
Definition: setupapi.h:351
COLORREF desktop_color
Definition: desk.h:106
int idName
Definition: hotplug.h:27
#define REGSTR_PATH_CONTROLSFOLDER
Definition: regstr.h:76
int idIcon
Definition: hotplug.h:26
#define CALLBACK
Definition: compat.h:27
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD dwReason, LPVOID lpvReserved)
Definition: desk.c:358
int idInfo
Definition: cpl.h:27
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define ZeroMemory
Definition: winbase.h:1642
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:120
#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:67
static BOOL InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc, LPFNPSPCALLBACK pfnCallback)
Definition: desk.c:80
int32_t INT_PTR
Definition: typedefs.h:62
#define PSH_USECALLBACK
Definition: prsht.h:48
#define argv
Definition: mplay32.c:18
#define IDD_BACKGROUND
Definition: resource.h:10
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:248
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:28
#define CPL_DBLCLK
Definition: cpl.h:16
DWORD dwReason
Definition: misc.cpp:154
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
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
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:2013
#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:40
LPWSTR *WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int *numargs)
Definition: shell32_main.c:76
#define LPPROPSHEETPAGE
Definition: prsht.h:372
smooth NULL
Definition: ftsmooth.c:416
#define PROPSHEETHEADER
Definition: prsht.h:374
static int CALLBACK PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
Definition: desk.c:122
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:381
#define DLL_PROCESS_DETACH
Definition: compat.h:119
#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:282
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:29
HINSTANCE hApplet
Definition: desk.c:25
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:8
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:409
#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
APPLET Applets[NUM_APPLETS]
Definition: desk.c:29
#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:112
#define wcsicmp
Definition: string.h:1152
BOOL WINAPI DestroyMenu(_In_ HMENU)
INT_PTR(CALLBACK * DLGPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2870
#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:5718
HICON hIcon
Definition: msconfig.c:44
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:1991
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:1935
unsigned int UINT
Definition: ndis.h:50
UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam)
Definition: shellord.c:1724
static const struct @202 PropPages[]
static LONG APIENTRY DisplayApplet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam)
Definition: desk.c:140
INT_PTR CALLBACK BackgroundPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: background.c:1157
#define PropertySheet
Definition: prsht.h:382
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:1607
WCHAR * LPWSTR
Definition: xmlstorage.h:184
INT_PTR CALLBACK SettingsPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define LPFNPSPCALLBACK
Definition: prsht.h:370
LPFNPSPCALLBACK Callback
Definition: desk.c:111
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:110
#define CPL_GETCOUNT
Definition: cpl.h:13
#define LoadString
Definition: winuser.h:5720
#define PROPSHEETPAGE
Definition: prsht.h:371
#define APIENTRY
Definition: api.h:79
#define ICON_BIG
Definition: tnclass.cpp:51
Definition: hotplug.h:24
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