ReactOS 0.4.15-dev-6663-gd1e9fe1
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
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
67static 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
80static 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
108static 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" },
122
123static 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 */
141static 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;
154
156
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
209 }
210
211 ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
212 psh.dwSize = sizeof(PROPSHEETHEADER);
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
251cleanup:
253
254 if (hpsxa != NULL)
256
257 if (argv)
259
260 return TRUE;
261}
262
263
264/* Control Panel Callback */
266CPlApplet(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
309void
310WINAPI
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
358void
359WINAPI
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
388{
390
391 switch (dwReason)
392 {
395 RegisterPreviewControl(hInstDLL);
396// case DLL_THREAD_ATTACH:
397 hApplet = hInstDLL;
398 break;
399
401 UnregisterPreviewControl(hInstDLL);
403 break;
404 }
405
406 return TRUE;
407}
static int argc
Definition: ServiceArgs.c:12
BOOL ActivateThemeFile(LPCWSTR pwszFile)
Definition: theme.c:1014
GLOBAL_DATA g_GlobalData
Definition: background.c:70
DWORD dwReason
Definition: misc.cpp:154
HINSTANCE hInstance
Definition: charmap.c:19
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define CPL_INQUIRE
Definition: cpl.h:14
#define CPL_DBLCLK
Definition: cpl.h:16
#define CPL_STARTWPARMSW
Definition: cpl.h:21
#define CPL_INIT
Definition: cpl.h:12
#define CPL_GETCOUNT
Definition: cpl.h:13
#define CPLPAGE_DISPLAY_BACKGROUND
Definition: cplext.h:8
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define DLGPROC
Definition: maze.c:62
#define ERROR_SUCCESS
Definition: deptool.c:10
WORD idDlg
Definition: desk.c:110
static BOOL InitPropSheetPage(PROPSHEETHEADER *ppsh, WORD idDlg, DLGPROC DlgProc, LPFNPSPCALLBACK pfnCallback)
Definition: desk.c:81
#define NUM_APPLETS
Definition: desk.c:15
void WINAPI InstallScreenSaverW(IN HWND hWindow, IN HANDLE hInstance, IN LPCWSTR pszFile, IN UINT nCmdShow)
Definition: desk.c:311
static const struct @208 PropPages[]
static int CALLBACK PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
Definition: desk.c:124
INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: appearance.c:216
void WINAPI InstallScreenSaverA(IN HWND hWindow, IN HANDLE hInstance, IN LPCSTR pszFile, IN UINT nCmdShow)
Definition: desk.c:360
INT_PTR CALLBACK SettingsPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
LPFNPSPCALLBACK Callback
Definition: desk.c:112
DLGPROC DlgProc
Definition: desk.c:111
HMENU LoadPopupMenu(IN HINSTANCE hInstance, IN LPCTSTR lpMenuName)
Definition: desk.c:41
INT_PTR CALLBACK ScreenSaverPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: screensaver.c:798
APPLET Applets[NUM_APPLETS]
Definition: desk.c:30
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD dwReason, LPVOID lpvReserved)
Definition: desk.c:387
LPWSTR Name
Definition: desk.c:113
INT_PTR CALLBACK BackgroundPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: background.c:1179
UINT CALLBACK SettingsPageCallbackProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
Definition: settings.c:689
static LONG APIENTRY DisplayApplet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam)
Definition: desk.c:142
INT_PTR CALLBACK ThemesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: theme.c:1064
static BOOL CALLBACK DisplayAppletPropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam)
Definition: desk.c:68
HWND hCPLWindow
Definition: desk.c:27
HINSTANCE hApplet
Definition: desk.c:26
#define MAX_DESK_PAGES
Definition: desk.h:81
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDS_CPLNAME
Definition: resource.h:8
#define IDS_CPLDESCRIPTION
Definition: resource.h:9
#define IDC_MONITOR
Definition: resource.h:29
#define IDC_DESK_ICON
Definition: resource.h:4
#define IDD_BACKGROUND
Definition: resource.h:10
#define IDD_SETTINGS
Definition: resource.h:13
#define IDD_SCREENSAVER
Definition: resource.h:11
#define IDD_APPEARANCE
Definition: resource.h:12
#define APIENTRY
Definition: api.h:79
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define SetLastError(x)
Definition: compat.h:752
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
#define wcsicmp
Definition: compat.h:15
static void cleanup(void)
Definition: main.c:1335
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2313
LPWSTR WINAPI GetCommandLineW(VOID)
Definition: proc.c:2013
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
DWORD WINAPI SetupDecompressOrCopyFileW(PCWSTR source, PCWSTR target, PUINT type)
Definition: misc.c:1690
LPWSTR WINAPI pSetupMultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage)
Definition: misc.c:281
VOID WINAPI MyFree(LPVOID lpMem)
Definition: misc.c:128
DWORD WINAPI SetupGetFileCompressionInfoW(PCWSTR source, PWSTR *name, PDWORD source_size, PDWORD target_size, PUINT type)
Definition: misc.c:1555
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
pKey DeleteObject()
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
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
_CRTIMP void __cdecl _wsplitpath(_In_z_ const wchar_t *_FullPath, _Pre_maybenull_ _Post_z_ wchar_t *_Drive, _Pre_maybenull_ _Post_z_ wchar_t *_Dir, _Pre_maybenull_ _Post_z_ wchar_t *_Filename, _Pre_maybenull_ _Post_z_ wchar_t *_Ext)
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
#define TEXT(s)
Definition: k32.h:26
if(dx< 0)
Definition: linetemp.h:194
static IN DWORD IN LPVOID lpvReserved
static HICON
Definition: imagelist.c:84
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
#define argv
Definition: mplay32.c:18
HICON hIcon
Definition: msconfig.c:44
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
unsigned int UINT
Definition: ndis.h:50
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
#define L(x)
Definition: ntvdm.h:50
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:278
long LONG
Definition: pedump.c:60
BOOL RegisterPreviewControl(IN HINSTANCE hInstance)
Definition: preview.c:539
VOID UnregisterPreviewControl(IN HINSTANCE hInstance)
Definition: preview.c:555
#define PROPSHEETHEADER
Definition: prsht.h:392
#define PSH_PROPTITLE
Definition: prsht.h:40
#define CreatePropertySheetPage
Definition: prsht.h:399
#define PSH_USECALLBACK
Definition: prsht.h:48
#define PSP_DEFAULT
Definition: prsht.h:22
#define PropertySheet
Definition: prsht.h:400
#define LPPROPSHEETPAGE
Definition: prsht.h:390
#define PSP_USECALLBACK
Definition: prsht.h:30
#define LPFNPSPCALLBACK
Definition: prsht.h:388
#define PSH_USEICONID
Definition: prsht.h:42
#define PSCB_INITIALIZED
Definition: prsht.h:75
#define PROPSHEETPAGE
Definition: prsht.h:389
#define REGSTR_PATH_CONTROLSFOLDER
Definition: regstr.h:76
_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 FILE_COMPRESSION_NONE
Definition: setupapi.h:356
LPWSTR *WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int *numargs)
Definition: shell32_main.c:80
void WINAPI SHDestroyPropSheetExtArray(HPSXA hpsxa)
Definition: shellord.c:2150
UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam)
Definition: shellord.c:2119
HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)
Definition: shellord.c:2003
#define DPRINT
Definition: sndvol32.h:71
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
Definition: hotplug.h:34
int idDescription
Definition: hotplug.h:37
int idName
Definition: hotplug.h:36
int idIcon
Definition: hotplug.h:35
APPLET_PROC AppletProc
Definition: hotplug.h:38
Definition: bl.h:1331
LONG bmMonHeight
Definition: desk.h:164
LONG bmMonWidth
Definition: desk.h:163
LPCWSTR pwszFile
Definition: desk.h:160
COLORREF desktop_color
Definition: desk.h:159
LPCWSTR pwszAction
Definition: desk.h:161
HBITMAP hMonitorBitmap
Definition: desk.h:162
Definition: uimain.c:89
Definition: cpl.h:24
LONG_PTR lData
Definition: cpl.h:28
int idName
Definition: cpl.h:26
int idInfo
Definition: cpl.h:27
int idIcon
Definition: cpl.h:25
#define ICON_BIG
Definition: tnclass.cpp:51
uint16_t * PWSTR
Definition: typedefs.h:56
int32_t INT_PTR
Definition: typedefs.h:64
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
Definition: wdfinterrupt.h:458
#define ZeroMemory
Definition: winbase.h:1700
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
DWORD WINAPI GetSysColor(_In_ int)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define COLOR_DESKTOP
Definition: winuser.h:908
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define LoadMenu
Definition: winuser.h:5807
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2132
#define MAKEINTRESOURCE
Definition: winuser.h:591
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2044
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185