ReactOS 0.4.15-dev-8058-ga7cbb60
folder_options.cpp
Go to the documentation of this file.
1/*
2 * Folder Options
3 *
4 * Copyright 2007 Johannes Anderwald <johannes.anderwald@reactos.org>
5 * Copyright 2016-2018 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include "precomp.h"
23
25
26// Folder Options:
27// CLASSKEY = HKEY_CLASSES_ROOT\CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}
28
30// strings
31
32// path to shell32
33LPCWSTR g_pszShell32 = L"%SystemRoot%\\system32\\shell32.dll";
34
35// the space characters
36LPCWSTR g_pszSpace = L" \t\n\r\f\v";
37
39// utility functions
40
42{
43 BITMAPINFO bi;
44 LPVOID pvBits;
45
46 ZeroMemory(&bi, sizeof(bi));
48 bi.bmiHeader.biWidth = cx;
50 bi.bmiHeader.biPlanes = 1;
51 bi.bmiHeader.biBitCount = 24;
53
54 HBITMAP hbm = CreateDIBSection(hDC, &bi, DIB_RGB_COLORS, &pvBits, NULL, 0);
55 return hbm;
56}
57
59{
61 if (!hDC)
62 return NULL;
63
65 if (!hbm)
66 {
68 return NULL;
69 }
70
71 HGDIOBJ hbmOld = SelectObject(hDC, hbm);
72 {
73 RECT rc = { 0, 0, cx, cy };
74 FillRect(hDC, &rc, HBRUSH(COLOR_3DFACE + 1));
75 if (hIcon)
76 {
77 DrawIconEx(hDC, 0, 0, hIcon, cx, cy, 0, NULL, DI_NORMAL);
78 }
79 }
80 SelectObject(hDC, hbmOld);
82
83 return hbm;
84}
85
87{
88 INT cxSmallIcon = GetSystemMetrics(SM_CXSMICON);
89 INT cySmallIcon = GetSystemMetrics(SM_CYSMICON);
90
91 HBITMAP hbm = Create24BppBitmap(hDC, cxSmallIcon, cySmallIcon);
92 if (hbm == NULL)
93 return NULL; // failure
94
95 RECT Rect, BoxRect;
96 SetRect(&Rect, 0, 0, cxSmallIcon, cySmallIcon);
97 BoxRect = Rect;
98 InflateRect(&BoxRect, -1, -1);
99
100 HGDIOBJ hbmOld = SelectObject(hDC, hbm);
101 {
103 if (bCheck)
104 uState |= DFCS_CHECKED;
105 if (!bEnabled)
106 uState |= DFCS_INACTIVE;
107 DrawFrameControl(hDC, &BoxRect, DFC_BUTTON, uState);
108 }
109 SelectObject(hDC, hbmOld);
110
111 return hbm; // success
112}
113
115{
116 INT cxSmallIcon = GetSystemMetrics(SM_CXSMICON);
117 INT cySmallIcon = GetSystemMetrics(SM_CYSMICON);
118
119 HBITMAP hbm = CreateBitmap(cxSmallIcon, cySmallIcon, 1, 1, NULL);
120 if (hbm == NULL)
121 return NULL; // failure
122
123 RECT Rect, BoxRect;
124 SetRect(&Rect, 0, 0, cxSmallIcon, cySmallIcon);
125 BoxRect = Rect;
126 InflateRect(&BoxRect, -1, -1);
127
128 HGDIOBJ hbmOld = SelectObject(hDC, hbm);
129 {
131 FillRect(hDC, &BoxRect, HBRUSH(GetStockObject(BLACK_BRUSH)));
132 }
133 SelectObject(hDC, hbmOld);
134
135 return hbm; // success
136}
137
139{
140 INT cxSmallIcon = GetSystemMetrics(SM_CXSMICON);
141 INT cySmallIcon = GetSystemMetrics(SM_CYSMICON);
142
143 HBITMAP hbm = Create24BppBitmap(hDC, cxSmallIcon, cySmallIcon);
144 if (hbm == NULL)
145 return NULL; // failure
146
147 RECT Rect, BoxRect;
148 SetRect(&Rect, 0, 0, cxSmallIcon, cySmallIcon);
149 BoxRect = Rect;
150 InflateRect(&BoxRect, -1, -1);
151
152 HGDIOBJ hbmOld = SelectObject(hDC, hbm);
153 {
155 if (bCheck)
156 uState |= DFCS_CHECKED;
157 if (!bEnabled)
158 uState |= DFCS_INACTIVE;
159 DrawFrameControl(hDC, &BoxRect, DFC_BUTTON, uState);
160 }
161 SelectObject(hDC, hbmOld);
162
163 return hbm; // success
164}
165
167{
168 INT cxSmallIcon = GetSystemMetrics(SM_CXSMICON);
169 INT cySmallIcon = GetSystemMetrics(SM_CYSMICON);
170
171 HBITMAP hbm = CreateBitmap(cxSmallIcon, cySmallIcon, 1, 1, NULL);
172 if (hbm == NULL)
173 return NULL; // failure
174
175 RECT Rect, BoxRect;
176 SetRect(&Rect, 0, 0, cxSmallIcon, cySmallIcon);
177 BoxRect = Rect;
178 InflateRect(&BoxRect, -1, -1);
179
180 HGDIOBJ hbmOld = SelectObject(hDC, hbm);
181 {
184 DrawFrameControl(hDC, &BoxRect, DFC_BUTTON, uState);
185 }
186 SelectObject(hDC, hbmOld);
187
188 return hbm; // success
189}
190
192
193// CMSGlobalFolderOptionsStub --- The owner window of Folder Options.
194// This window hides taskbar button of Folder Options.
195
196#define GlobalFolderOptionsClassName _T("MSGlobalFolderOptionsStub")
197
198class CMSGlobalFolderOptionsStub : public CWindowImpl<CMSGlobalFolderOptionsStub>
199{
200public:
202
205};
206
208
210
211static int CALLBACK
213{
214 // NOTE: This callback is needed to set large icon correctly.
215 HICON hIcon;
216 switch (uMsg)
217 {
218 case PSCB_INITIALIZED:
219 {
221 SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
222 break;
223 }
224 }
225 return 0;
226}
227
228enum {
233
234static DWORD CALLBACK
236{
237 PROPSHEETHEADERW pinfo;
238 HPROPSHEETPAGE hppages[3];
239 HPROPSHEETPAGE hpage;
240 UINT num_pages = 0;
241 WCHAR szOptions[100];
242
244 if (hpage)
245 hppages[num_pages++] = hpage;
246
248 if (hpage)
249 hppages[num_pages++] = hpage;
250
252 if (hpage)
253 hppages[num_pages++] = hpage;
254
255 szOptions[0] = 0;
257 szOptions[_countof(szOptions) - 1] = 0;
258
259 // the stub window to hide taskbar button
263 if (!stub.Create(NULL, NULL, NULL, style, exstyle))
264 {
265 ERR("stub.Create failed\n");
266 return 0;
267 }
268
269 memset(&pinfo, 0x0, sizeof(PROPSHEETHEADERW));
270 pinfo.dwSize = sizeof(PROPSHEETHEADERW);
271 pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_USEICONID | PSH_USECALLBACK;
272 pinfo.hwndParent = stub;
273 pinfo.nPages = num_pages;
274 pinfo.phpage = hppages;
276 pinfo.pszCaption = szOptions;
278 pinfo.nStartPage = PtrToUlong(param);
279
280 PropertySheetW(&pinfo);
281
282 stub.DestroyWindow();
283 return 0;
284}
285
288{
290 if (hWnd)
291 {
293 if (hWnd == GetParent(hPop))
294 {
295 PostMessage(hPop, PSM_SETCURSEL, Page, 0);
296 }
298 return;
299 }
300
302 if (Async)
304 else
305 ShowFolderOptionsDialogThreadProc(param); // Rundll32 caller cannot be async!
306}
307
308static VOID
310{
311 switch(fOptions)
312 {
313 case 0:
315 break;
316
317 case 1: // Taskbar settings
318#if (NTDDI_VERSION >= NTDDI_VISTA)
319 case 3: // Start menu settings
320 case 4: // Tray icon settings
321 case 6: // Taskbar toolbars
322#endif
324 break;
325
326 case 7: // Windows 8, 10
328 break;
329
330 default:
331 FIXME("unrecognized options id %d\n", fOptions);
332 }
333}
334
335/*************************************************************************
336 * Options_RunDLL (SHELL32.@)
337 */
340{
342}
343
344/*************************************************************************
345 * Options_RunDLLA (SHELL32.@)
346 */
349{
351}
352
353/*************************************************************************
354 * Options_RunDLLW (SHELL32.@)
355 */
358{
360}
static HDC hDC
Definition: 3dtext.c:33
INT_PTR CALLBACK FolderOptionsViewDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: view.cpp:932
INT_PTR CALLBACK FolderOptionsFileTypesDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: filetypes.cpp:1673
INT_PTR CALLBACK FolderOptionsGeneralDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: general.cpp:362
#define shell32_hInstance
Arabic default style
Definition: afstyles.h:94
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define EXTERN_C
Definition: basetyps.h:12
#define FIXME(fmt,...)
Definition: debug.h:114
#define ERR(fmt,...)
Definition: debug.h:113
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define IDS_FOLDER_OPTIONS
Definition: resource.h:133
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
Definition: propsheet.c:2913
INT WINAPI StrToIntW(LPCWSTR lpString)
Definition: string.c:411
INT WINAPI StrToIntA(LPCSTR lpszStr)
Definition: string.c:374
#define CALLBACK
Definition: compat.h:35
BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback)
Definition: thread.c:356
HPROPSHEETPAGE SH_CreatePropertySheetPage(LPCSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle)
#define BI_RGB
Definition: precomp.h:56
#define UlongToPtr(u)
Definition: config.h:106
#define PtrToUlong(u)
Definition: config.h:107
HINSTANCE hInst
Definition: dxdiag.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
EXTERN_C VOID WINAPI Options_RunDLLW(HWND hWnd, HINSTANCE hInst, LPCWSTR cmd, DWORD nCmdShow)
EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj)
HBITMAP CreateRadioMask(HDC hDC)
EXTERN_C VOID WINAPI Options_RunDLLA(HWND hWnd, HINSTANCE hInst, LPCSTR cmd, DWORD nCmdShow)
LPCWSTR g_pszSpace
HBITMAP CreateCheckMask(HDC hDC)
HBITMAP Create24BppBitmap(HDC hDC, INT cx, INT cy)
@ PAGE_FILETYPES
@ PAGE_VIEW
@ PAGE_GENERAL
static int CALLBACK PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
#define GlobalFolderOptionsClassName
HBITMAP CreateRadioImage(HDC hDC, BOOL bCheck, BOOL bEnabled)
LPCWSTR g_pszShell32
VOID WINAPI ShowFolderOptionsDialog(UINT Page, BOOL Async=FALSE)
HBITMAP CreateCheckImage(HDC hDC, BOOL bCheck, BOOL bEnabled)
static DWORD CALLBACK ShowFolderOptionsDialogThreadProc(LPVOID param)
EXTERN_C VOID WINAPI Options_RunDLL(HWND hWnd, HINSTANCE hInst, LPCSTR cmd, DWORD nCmdShow)
static VOID Options_RunDLLCommon(HWND hWnd, HINSTANCE hInst, int fOptions, DWORD nCmdShow)
HBITMAP BitmapFromIcon(HICON hIcon, INT cx, INT cy)
FxAutoRegKey hKey
GLfloat param
Definition: glext.h:5796
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define END_MSG_MAP()
Definition: atlwin.h:1917
#define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd)
Definition: atlwin.h:2004
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
HICON hIcon
Definition: msconfig.c:44
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
unsigned int UINT
Definition: ndis.h:50
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
Definition: mm.h:1306
#define L(x)
Definition: ntvdm.h:50
#define WS_CAPTION
Definition: pedump.c:624
#define WS_DISABLED
Definition: pedump.c:621
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define PSH_USECALLBACK
Definition: prsht.h:48
#define PSH_USEICONID
Definition: prsht.h:42
#define PSCB_INITIALIZED
Definition: prsht.h:75
struct _PROPSHEETHEADERW PROPSHEETHEADERW
#define PSM_SETCURSEL
Definition: prsht.h:167
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
#define memset(x, y, z)
Definition: compat.h:39
#define IDD_FOLDER_OPTIONS_FILETYPES
Definition: shresdef.h:410
#define IDD_FOLDER_OPTIONS_GENERAL
Definition: shresdef.h:408
#define IDI_SHELL_FOLDER_OPTIONS
Definition: shresdef.h:664
#define IDD_FOLDER_OPTIONS_VIEW
Definition: shresdef.h:409
#define _countof(array)
Definition: sndvol32.h:68
DWORD dwSize
Definition: prsht.h:293
DWORD dwFlags
Definition: prsht.h:294
LPCWSTR pszIcon
Definition: prsht.h:299
HWND hwndParent
Definition: prsht.h:295
PFNPROPSHEETCALLBACK pfnCallback
Definition: prsht.h:311
HPROPSHEETPAGE * phpage
Definition: prsht.h:309
UINT nStartPage
Definition: prsht.h:304
LPCWSTR pszCaption
Definition: prsht.h:301
Definition: stubgen.c:11
Definition: ftp_var.h:139
USHORT biBitCount
Definition: precomp.h:46
ULONG biCompression
Definition: precomp.h:47
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1476
struct _stub stub
#define ICON_BIG
Definition: tnclass.cpp:51
int32_t INT
Definition: typedefs.h:58
#define WM_PROGMAN_OPENSHELLSETTINGS
Definition: undocshell.h:60
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:245
HWND WINAPI GetShellWindow(VOID)
Definition: desktop.c:651
#define ZeroMemory
Definition: winbase.h:1712
LONG_PTR LPARAM
Definition: windef.h:208
#define WINAPI
Definition: msvc.h:6
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HGDIOBJ WINAPI GetStockObject(_In_ int)
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
#define DI_NORMAL
Definition: wingdi.h:72
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define WHITE_BRUSH
Definition: wingdi.h:902
#define BLACK_BRUSH
Definition: wingdi.h:896
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
BOOL WINAPI DeleteDC(_In_ HDC)
#define FindWindow
Definition: winuser.h:5777
#define COLOR_WINDOWTEXT
Definition: winuser.h:921
HWND WINAPI GetLastActivePopup(_In_ HWND)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI DrawFrameControl(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define DFCS_FLAT
Definition: winuser.h:510
#define DFCS_BUTTONCHECK
Definition: winuser.h:496
#define DFCS_INACTIVE
Definition: winuser.h:502
BOOL WINAPI SetForegroundWindow(_In_ HWND)
#define DFC_BUTTON
Definition: winuser.h:476
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define SM_CYSMICON
Definition: winuser.h:1013
#define DFCS_MONO
Definition: winuser.h:511
#define SM_CXSMICON
Definition: winuser.h:1012
BOOL WINAPI DrawIconEx(_In_ HDC, _In_ int, _In_ int, _In_ HICON, _In_ int, _In_ int, _In_ UINT, _In_opt_ HBRUSH, _In_ UINT)
Definition: cursoricon.c:2059
#define DFCS_BUTTONRADIOMASK
Definition: winuser.h:498
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
#define DFCS_BUTTONRADIOIMAGE
Definition: winuser.h:497
#define PostMessage
Definition: winuser.h:5832
HWND WINAPI GetParent(_In_ HWND)
#define DFCS_CHECKED
Definition: winuser.h:504
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2106
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define COLOR_3DFACE
Definition: winuser.h:929
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185