ReactOS 0.4.16-dev-303-g11d5cb8
CDrvDefExt Class Reference

#include <drvdefext.h>

Inheritance diagram for CDrvDefExt:
Collaboration diagram for CDrvDefExt:

Public Member Functions

 CDrvDefExt ()
 
 ~CDrvDefExt ()
 
STDMETHOD() Initialize (PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pDataObj, HKEY hkeyProgID) override
 
STDMETHOD() QueryContextMenu (HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override
 
STDMETHOD() InvokeCommand (LPCMINVOKECOMMANDINFO lpici) override
 
STDMETHOD() GetCommandString (UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax) override
 
STDMETHOD() AddPages (LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) override
 
STDMETHOD() ReplacePage (UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam) override
 
STDMETHOD() SetSite (IUnknown *punk) override
 
STDMETHOD() GetSite (REFIID iid, void **ppvSite) override
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidlFolder, [in] IDataObject *pdtobj, [in] HKEY hkeyProgID)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT QueryContextMenu ([in] HMENU hmenu, [in] UINT indexMenu, [in] UINT idCmdFirst, [in] UINT idCmdLast, [in] UINT uFlags)
 
HRESULT InvokeCommand ([in] LPCMINVOKECOMMANDINFO lpici)
 
HRESULT GetCommandString ([in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax)
 
- Public Member Functions inherited from IShellPropSheetExt
HRESULT AddPages ([in] LPFNSVADDPROPSHEETPAGE pfnAddPage, [in] LPARAM lParam)
 
HRESULT ReplacePage ([in] EXPPS uPageID, [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith, [in] LPARAM lParam)
 
- Public Member Functions inherited from IObjectWithSite
HRESULT SetSite ([in] IUnknown *pUnkSite)
 
HRESULT GetSite ([in] REFIID riid, [out, iid_is(riid)] PVOID *ppvSite)
 

Private Member Functions

VOID PaintStaticControls (HWND hwndDlg, LPDRAWITEMSTRUCT pDrawItem)
 
VOID InitGeneralPage (HWND hwndDlg)
 

Static Private Member Functions

static INT_PTR CALLBACK GeneralPageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK ExtraPageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK HardwarePageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 

Private Attributes

WCHAR m_wszDrive [MAX_PATH]
 
UINT m_FreeSpacePerc
 

Additional Inherited Members

- Public Types inherited from IShellExtInit
typedef IShellExtInitLPSHELLEXTINIT
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IContextMenu
typedef IContextMenuLPCONTEXTMENU
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFO CMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFOLPCMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMInvokeCommandInfoEx CMINVOKECOMMANDINFOEX
 
typedef struct IContextMenu::tagCMInvokeCommandInfoExLPCMINVOKECOMMANDINFOEX
 
- Public Types inherited from IShellPropSheetExt
enum  tagSHELLPROPSHEETEXTPAGEID { EXPPS_FILETYPES = 0x1 }
 
typedef UINT EXPPS
 
- Public Types inherited from IObjectWithSite
typedef IObjectWithSiteLPOBJECTWITHSITE
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 
- Static Public Attributes inherited from IContextMenu
static const WCHAR CMDSTR_NEWFOLDERW [] = {'N','e','w','F','o','l','d','e','r',0}
 
static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0}
 
static const WCHAR CMDSTR_VIEWDETAILSW [] = {'V','i','e','w','D','e','t','a','i','l','s',0}
 

Detailed Description

Definition at line 24 of file drvdefext.h.

Constructor & Destructor Documentation

◆ CDrvDefExt()

CDrvDefExt::CDrvDefExt ( )

Definition at line 682 of file drvdefext.cpp.

683{
684 m_wszDrive[0] = L'\0';
685}
WCHAR m_wszDrive[MAX_PATH]
Definition: drvdefext.h:39
#define L(x)
Definition: ntvdm.h:50

◆ ~CDrvDefExt()

CDrvDefExt::~CDrvDefExt ( )

Definition at line 687 of file drvdefext.cpp.

688{
689
690}

Member Function Documentation

◆ AddPages()

HRESULT WINAPI CDrvDefExt::AddPages ( LPFNADDPROPSHEETPAGE  pfnAddPage,
LPARAM  lParam 
)
override

Definition at line 749 of file drvdefext.cpp.

750{
751 HPROPSHEETPAGE hPage;
752
754 NULL, &PropSheetPageLifetimeCallback<CDrvDefExt>);
755 HRESULT hr = AddPropSheetPage(hPage, pfnAddPage, lParam);
757 return hr;
758 else
759 AddRef(); // For PropSheetPageLifetimeCallback
760
762 {
765 (LPARAM)this,
766 NULL);
767 if (hPage)
768 pfnAddPage(hPage, lParam);
769 }
770
772 {
775 (LPARAM)this,
776 NULL);
777 if (hPage)
778 pfnAddPage(hPage, lParam);
779 }
780
781 return S_OK;
782}
static INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: drvdefext.cpp:505
static INT_PTR CALLBACK HardwarePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: drvdefext.cpp:656
static INT_PTR CALLBACK ExtraPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: drvdefext.cpp:594
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497
static HRESULT AddPropSheetPage(HPROPSHEETPAGE hPage, LPFNSVADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
Definition: precomp.h:150
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
HRESULT hr
Definition: shlfolder.c:183
#define IDD_DRIVE_TOOLS
Definition: shresdef.h:398
#define IDD_DRIVE_HARDWARE
Definition: shresdef.h:399
#define IDD_DRIVE_PROPERTIES
Definition: shresdef.h:397
HPROPSHEETPAGE SH_CreatePropertySheetPage(WORD wDialogId, DLGPROC pfnDlgProc, LPARAM lParam, LPCWSTR pwszTitle)
Definition: propsheet.cpp:208
HPROPSHEETPAGE SH_CreatePropertySheetPageEx(WORD wDialogId, DLGPROC pfnDlgProc, LPARAM lParam, LPCWSTR pwszTitle, LPFNPSPCALLBACK Callback)
Definition: propsheet.cpp:188
#define DRIVE_REMOTE
Definition: winbase.h:279
#define DRIVE_FIXED
Definition: winbase.h:278
LONG_PTR LPARAM
Definition: windef.h:208

◆ ExtraPageProc()

INT_PTR CALLBACK CDrvDefExt::ExtraPageProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
staticprivate

Definition at line 594 of file drvdefext.cpp.

599{
600 switch (uMsg)
601 {
602 case WM_INITDIALOG:
603 {
605 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)ppsp->lParam);
606 return TRUE;
607 }
608 case WM_COMMAND:
609 {
610 WCHAR wszBuf[MAX_PATH];
611 DWORD cbBuf = sizeof(wszBuf);
612 CDrvDefExt *pDrvDefExt = reinterpret_cast<CDrvDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
613
614 switch(LOWORD(wParam))
615 {
616 case 14000:
618 break;
619 case 14001:
621 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\DefragPath",
622 NULL,
624 NULL,
625 (PVOID)wszBuf,
626 &cbBuf) == ERROR_SUCCESS)
627 {
628 WCHAR wszCmd[MAX_PATH];
629
630 StringCbPrintfW(wszCmd, sizeof(wszCmd), wszBuf, pDrvDefExt->m_wszDrive[0]);
631
632 if (ShellExecuteW(hwndDlg, NULL, wszCmd, NULL, NULL, SW_SHOW) <= (HINSTANCE)32)
633 ERR("Failed to create defrag process %ls\n", wszCmd);
634 }
635 break;
636 case 14002:
638 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\BackupPath",
639 NULL,
641 NULL,
642 (PVOID)wszBuf,
643 &cbBuf) == ERROR_SUCCESS)
644 {
645 if (ShellExecuteW(hwndDlg, NULL, wszBuf, NULL, NULL, SW_SHOW) <= (HINSTANCE)32)
646 ERR("Failed to create backup process %ls\n", wszBuf);
647 }
648 }
649 break;
650 }
651 }
652 return FALSE;
653}
#define shell32_hInstance
#define ERR(fmt,...)
Definition: precomp.h:57
WPARAM wParam
Definition: combotst.c:138
#define ERROR_SUCCESS
Definition: deptool.c:10
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
#define MAX_PATH
Definition: compat.h:34
#define RRF_RT_REG_SZ
Definition: driver.c:575
static INT_PTR CALLBACK ChkDskDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: drvdefext.cpp:160
unsigned long DWORD
Definition: ntddk_ex.h:95
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define LOWORD(l)
Definition: pedump.c:82
struct _PROPSHEETPAGEW * LPPROPSHEETPAGEW
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2492
#define IDD_CHECK_DISK
Definition: shresdef.h:520
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:557
LPARAM lParam
Definition: prsht.h:227
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define DWLP_USER
Definition: winuser.h:875
#define WM_COMMAND
Definition: winuser.h:1743
#define WM_INITDIALOG
Definition: winuser.h:1742
#define SW_SHOW
Definition: winuser.h:778
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by AddPages().

◆ GeneralPageProc()

INT_PTR CALLBACK CDrvDefExt::GeneralPageProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
staticprivate

Definition at line 505 of file drvdefext.cpp.

510{
511 switch(uMsg)
512 {
513 case WM_INITDIALOG:
514 {
516 if (ppsp == NULL)
517 break;
518
519 CDrvDefExt *pDrvDefExt = reinterpret_cast<CDrvDefExt *>(ppsp->lParam);
520 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pDrvDefExt);
521 pDrvDefExt->InitGeneralPage(hwndDlg);
522 return TRUE;
523 }
524 case WM_DRAWITEM:
525 {
527
528 if (pDrawItem->CtlID >= 14013 && pDrawItem->CtlID <= 14015)
529 {
530 CDrvDefExt *pDrvDefExt = reinterpret_cast<CDrvDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
531 pDrvDefExt->PaintStaticControls(hwndDlg, pDrawItem);
532 return TRUE;
533 }
534 break;
535 }
536 case WM_PAINT:
537 break;
538 case WM_COMMAND:
539 if (LOWORD(wParam) == 14010) /* Disk Cleanup */
540 {
541 CDrvDefExt *pDrvDefExt = reinterpret_cast<CDrvDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
542 WCHAR wszBuf[256];
543 DWORD cbBuf = sizeof(wszBuf);
544
546 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\CleanupPath",
547 NULL,
549 NULL,
550 (PVOID)wszBuf,
551 &cbBuf) == ERROR_SUCCESS)
552 {
553 WCHAR wszCmd[MAX_PATH];
554
555 StringCbPrintfW(wszCmd, sizeof(wszCmd), wszBuf, pDrvDefExt->m_wszDrive[0]);
556
557 if (ShellExecuteW(hwndDlg, NULL, wszCmd, NULL, NULL, SW_SHOW) <= (HINSTANCE)32)
558 ERR("Failed to create cleanup process %ls\n", wszCmd);
559 }
560 }
561 else if (LOWORD(wParam) == 14000) /* Label */
562 {
563 if (HIWORD(wParam) == EN_CHANGE)
564 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
565 }
566 break;
567 case WM_NOTIFY:
568 if (((LPNMHDR)lParam)->hwndFrom == GetParent(hwndDlg))
569 {
570 /* Property Sheet */
572
573 if (lppsn->hdr.code == PSN_APPLY)
574 {
575 CDrvDefExt *pDrvDefExt = reinterpret_cast<CDrvDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
576 WCHAR wszBuf[256];
577
578 if (GetDlgItemTextW(hwndDlg, 14000, wszBuf, _countof(wszBuf)))
579 SetVolumeLabelW(pDrvDefExt->m_wszDrive, wszBuf);
581 return TRUE;
582 }
583 }
584 break;
585
586 default:
587 break;
588 }
589
590 return FALSE;
591}
VOID PaintStaticControls(HWND hwndDlg, LPDRAWITEMSTRUCT pDrawItem)
Definition: drvdefext.cpp:192
VOID InitGeneralPage(HWND hwndDlg)
Definition: drvdefext.cpp:394
BOOL WINAPI SetVolumeLabelW(IN LPCWSTR lpRootPathName, IN LPCWSTR lpVolumeName OPTIONAL)
Definition: volume.c:503
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
#define PSN_APPLY
Definition: prsht.h:117
#define PSNRET_NOERROR
Definition: prsht.h:129
struct _PSHNOTIFY * LPPSHNOTIFY
#define WM_NOTIFY
Definition: richedit.h:61
#define _countof(array)
Definition: sndvol32.h:70
NMHDR hdr
Definition: prsht.h:330
UINT code
Definition: winuser.h:3162
#define HIWORD(l)
Definition: typedefs.h:247
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2263
#define WM_PAINT
Definition: winuser.h:1623
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
#define WM_DRAWITEM
Definition: winuser.h:1648
HWND WINAPI GetParent(_In_ HWND)
#define DWLP_MSGRESULT
Definition: winuser.h:873
#define EN_CHANGE
Definition: winuser.h:2025

Referenced by AddPages().

◆ GetCommandString()

HRESULT WINAPI CDrvDefExt::GetCommandString ( UINT_PTR  idCmd,
UINT  uType,
UINT pwReserved,
LPSTR  pszName,
UINT  cchMax 
)
override

Implements IContextMenu.

Definition at line 742 of file drvdefext.cpp.

743{
745 return E_NOTIMPL;
746}
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ GetSite()

HRESULT WINAPI CDrvDefExt::GetSite ( REFIID  iid,
void **  ppvSite 
)
override

Definition at line 799 of file drvdefext.cpp.

800{
802 return E_NOTIMPL;
803}

◆ HardwarePageProc()

INT_PTR CALLBACK CDrvDefExt::HardwarePageProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
staticprivate

Definition at line 656 of file drvdefext.cpp.

661{
664
665 switch(uMsg)
666 {
667 case WM_INITDIALOG:
668 {
669 GUID Guids[2];
670 Guids[0] = GUID_DEVCLASS_DISKDRIVE;
671 Guids[1] = GUID_DEVCLASS_CDROM;
672
673 /* create the hardware page */
675 break;
676 }
677 }
678
679 return FALSE;
680}
@ HWPD_STANDARDLIST
Definition: main.h:24
HWND WINAPI DeviceCreateHardwarePageEx(HWND hWndParent, LPGUID lpGuids, UINT uNumberOfGuids, HWPAGE_DISPLAYMODE DisplayMode)
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:325

Referenced by AddPages().

◆ InitGeneralPage()

VOID CDrvDefExt::InitGeneralPage ( HWND  hwndDlg)
private

Definition at line 394 of file drvdefext.cpp.

395{
396 WCHAR wszVolumeName[MAX_PATH+1] = {0};
397 WCHAR wszFileSystem[MAX_PATH+1] = {0};
398 WCHAR wszBuf[128];
399 BOOL bRet;
400
401 bRet = GetVolumeInformationW(m_wszDrive, wszVolumeName, _countof(wszVolumeName), NULL, NULL, NULL, wszFileSystem, _countof(wszFileSystem));
402 if (bRet)
403 {
404 /* Set volume label and filesystem */
405 SetDlgItemTextW(hwndDlg, 14000, wszVolumeName);
406 SetDlgItemTextW(hwndDlg, 14002, wszFileSystem);
407 }
408 else
409 {
410 LoadStringW(shell32_hInstance, IDS_FS_UNKNOWN, wszFileSystem, _countof(wszFileSystem));
411 SetDlgItemTextW(hwndDlg, 14002, wszFileSystem);
412 }
413
414 /* Set drive type and icon */
416 UINT IconId, TypeStrId = 0;
417 switch (DriveType)
418 {
419 case DRIVE_REMOVABLE:
421 IconId = IDI_SHELL_3_14_FLOPPY;
422 else
423 IconId = IDI_SHELL_REMOVEABLE;
424 break;
425 case DRIVE_CDROM: IconId = IDI_SHELL_CDROM; TypeStrId = IDS_DRIVE_CDROM; break;
426 case DRIVE_REMOTE: IconId = IDI_SHELL_NETDRIVE; TypeStrId = IDS_DRIVE_NETWORK; break;
427 case DRIVE_RAMDISK: IconId = IDI_SHELL_RAMDISK; break;
428 default: IconId = IDI_SHELL_DRIVE; TypeStrId = IDS_DRIVE_FIXED;
429 }
430
432 {
433 /* volume label textbox */
434 SendMessage(GetDlgItem(hwndDlg, 14000), EM_SETREADONLY, TRUE, 0);
435
436 /* disk compression */
437 ShowWindow(GetDlgItem(hwndDlg, 14011), FALSE);
438
439 /* index */
440 ShowWindow(GetDlgItem(hwndDlg, 14012), FALSE);
441 }
442
444 if (hIcon)
445 SendDlgItemMessageW(hwndDlg, 14016, STM_SETICON, (WPARAM)hIcon, 0);
446 if (TypeStrId && LoadStringW(shell32_hInstance, TypeStrId, wszBuf, _countof(wszBuf)))
447 SetDlgItemTextW(hwndDlg, 14001, wszBuf);
448
449 ULARGE_INTEGER FreeBytesAvailable, TotalNumberOfBytes;
450 if(GetDiskFreeSpaceExW(m_wszDrive, &FreeBytesAvailable, &TotalNumberOfBytes, NULL))
451 {
452 /* Init free space percentage used for drawing piechart */
453 m_FreeSpacePerc = (UINT)(FreeBytesAvailable.QuadPart * 100ull / TotalNumberOfBytes.QuadPart);
454
455 /* Used space */
456 if (SH_FormatByteSize(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, wszBuf, _countof(wszBuf)))
457 SetDlgItemTextW(hwndDlg, 14003, wszBuf);
458
459 if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, wszBuf, _countof(wszBuf)))
460 SetDlgItemTextW(hwndDlg, 14004, wszBuf);
461
462 /* Free space */
463 if (SH_FormatByteSize(FreeBytesAvailable.QuadPart, wszBuf, _countof(wszBuf)))
464 SetDlgItemTextW(hwndDlg, 14005, wszBuf);
465
466 if (StrFormatByteSizeW(FreeBytesAvailable.QuadPart, wszBuf, _countof(wszBuf)))
467 SetDlgItemTextW(hwndDlg, 14006, wszBuf);
468
469 /* Total space */
470 if (SH_FormatByteSize(TotalNumberOfBytes.QuadPart, wszBuf, _countof(wszBuf)))
471 SetDlgItemTextW(hwndDlg, 14007, wszBuf);
472
473 if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, wszBuf, _countof(wszBuf)))
474 SetDlgItemTextW(hwndDlg, 14008, wszBuf);
475 }
476 else
477 {
478 m_FreeSpacePerc = 0;
479
480 if (SH_FormatByteSize(0, wszBuf, _countof(wszBuf)))
481 {
482 SetDlgItemTextW(hwndDlg, 14003, wszBuf);
483 SetDlgItemTextW(hwndDlg, 14005, wszBuf);
484 SetDlgItemTextW(hwndDlg, 14007, wszBuf);
485 }
486 if (StrFormatByteSizeW(0, wszBuf, _countof(wszBuf)))
487 {
488 SetDlgItemTextW(hwndDlg, 14004, wszBuf);
489 SetDlgItemTextW(hwndDlg, 14006, wszBuf);
490 SetDlgItemTextW(hwndDlg, 14008, wszBuf);
491 }
492 }
493
494 /* Set drive description */
495 WCHAR wszFormat[50];
496 GetDlgItemTextW(hwndDlg, 14009, wszFormat, _countof(wszFormat));
497 swprintf(wszBuf, wszFormat, m_wszDrive[0]);
498 SetDlgItemTextW(hwndDlg, 14009, wszBuf);
499
500 /* show disk cleanup button only for fixed drives */
501 ShowWindow(GetDlgItem(hwndDlg, 14010), DriveType == DRIVE_FIXED);
502}
UINT DriveType
UINT m_FreeSpacePerc
Definition: drvdefext.h:40
BOOL WINAPI GetDiskFreeSpaceExW(IN LPCWSTR lpDirectoryName OPTIONAL, OUT PULARGE_INTEGER lpFreeBytesAvailableToCaller, OUT PULARGE_INTEGER lpTotalNumberOfBytes, OUT PULARGE_INTEGER lpTotalNumberOfFreeBytes)
Definition: disk.c:342
BOOL WINAPI GetVolumeInformationW(IN LPCWSTR lpRootPathName, IN LPWSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPWSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
Definition: volume.c:226
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2394
#define swprintf
Definition: precomp.h:40
UINT SH_FormatByteSize(LONGLONG cbSize, LPWSTR pwszResult, UINT cchResultMax)
Definition: filedefext.cpp:236
BOOL IsDriveFloppyW(LPCWSTR pszDriveRoot)
Definition: drvdefext.cpp:320
unsigned int BOOL
Definition: ntddk_ex.h:94
#define DRIVE_CDROM
Definition: machpc98.h:119
static HICON
Definition: imagelist.c:80
HICON hIcon
Definition: msconfig.c:44
unsigned int UINT
Definition: ndis.h:50
#define IDS_DRIVE_CDROM
Definition: shresdef.h:112
#define IDS_DRIVE_FIXED
Definition: shresdef.h:111
#define IDS_DRIVE_NETWORK
Definition: shresdef.h:113
#define IDS_FS_UNKNOWN
Definition: shresdef.h:116
#define IDI_SHELL_3_14_FLOPPY
Definition: shresdef.h:559
#define IDI_SHELL_NETDRIVE
Definition: shresdef.h:562
#define IDI_SHELL_CDROM
Definition: shresdef.h:564
#define IDI_SHELL_DRIVE
Definition: shresdef.h:561
#define IDI_SHELL_RAMDISK
Definition: shresdef.h:565
#define IDI_SHELL_REMOVEABLE
Definition: shresdef.h:560
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
#define DRIVE_RAMDISK
Definition: winbase.h:281
#define DRIVE_REMOVABLE
Definition: winbase.h:277
UINT_PTR WPARAM
Definition: windef.h:207
#define EM_SETREADONLY
Definition: winuser.h:2018
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define STM_SETICON
Definition: winuser.h:2095
#define IMAGE_ICON
Definition: winuser.h:212
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define SendMessage
Definition: winuser.h:5855
#define LR_SHARED
Definition: winuser.h:1103
#define LoadImage
Definition: winuser.h:5827
#define MAKEINTRESOURCE
Definition: winuser.h:591

Referenced by GeneralPageProc().

◆ Initialize()

HRESULT WINAPI CDrvDefExt::Initialize ( PCIDLIST_ABSOLUTE  pidlFolder,
IDataObject pDataObj,
HKEY  hkeyProgID 
)
override

Implements IShellExtInit.

Definition at line 693 of file drvdefext.cpp.

694{
695 FORMATETC format;
696 STGMEDIUM stgm;
697 HRESULT hr;
698
699 TRACE("%p %p %p %p\n", this, pidlFolder, pDataObj, hkeyProgID);
700
701 if (!pDataObj)
702 return E_FAIL;
703
704 format.cfFormat = CF_HDROP;
705 format.ptd = NULL;
706 format.dwAspect = DVASPECT_CONTENT;
707 format.lindex = -1;
708 format.tymed = TYMED_HGLOBAL;
709
710 hr = pDataObj->GetData(&format, &stgm);
711 if (FAILED(hr))
712 return hr;
713
714 if (!DragQueryFileW((HDROP)stgm.hGlobal, 0, m_wszDrive, _countof(m_wszDrive)))
715 {
716 ERR("DragQueryFileW failed\n");
717 ReleaseStgMedium(&stgm);
718 return E_FAIL;
719 }
720
721 ReleaseStgMedium(&stgm);
722 TRACE("Drive properties %ls\n", m_wszDrive);
723
724 return S_OK;
725}
#define CF_HDROP
Definition: constants.h:410
#define E_FAIL
Definition: ddrawi.h:102
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2033
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:622
HRESULT GetData([in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium)
#define FAILED(hr)
Definition: intsafe.h:51
#define TRACE(s)
Definition: solgame.cpp:4
Definition: format.c:58

◆ InvokeCommand()

HRESULT WINAPI CDrvDefExt::InvokeCommand ( LPCMINVOKECOMMANDINFO  lpici)
override

Implements IContextMenu.

Definition at line 735 of file drvdefext.cpp.

736{
738 return E_NOTIMPL;
739}

◆ PaintStaticControls()

VOID CDrvDefExt::PaintStaticControls ( HWND  hwndDlg,
LPDRAWITEMSTRUCT  pDrawItem 
)
private

Definition at line 192 of file drvdefext.cpp.

193{
194 HBRUSH hBrush;
195
196 if (pDrawItem->CtlID == 14013)
197 {
198 hBrush = CreateSolidBrush(RGB(0, 0, 255));
199 if (hBrush)
200 {
201 FillRect(pDrawItem->hDC, &pDrawItem->rcItem, hBrush);
202 DeleteObject((HGDIOBJ)hBrush);
203 }
204 }
205 else if (pDrawItem->CtlID == 14014)
206 {
207 hBrush = CreateSolidBrush(RGB(255, 0, 255));
208 if (hBrush)
209 {
210 FillRect(pDrawItem->hDC, &pDrawItem->rcItem, hBrush);
211 DeleteObject((HGDIOBJ)hBrush);
212 }
213 }
214 else if (pDrawItem->CtlID == 14015)
215 {
216 HBRUSH hBlueBrush = CreateSolidBrush(RGB(0, 0, 255));
217 HBRUSH hMagBrush = CreateSolidBrush(RGB(255, 0, 255));
218 HBRUSH hbrOld;
219 HPEN hBlackPen = (HPEN)GetStockObject(BLACK_PEN);
220 HPEN hDarkBluePen = CreatePen(PS_SOLID, 1, RGB(0, 0, 128));
221 HPEN hDarkMagPen = CreatePen(PS_SOLID, 1, RGB(128, 0, 128));
222 HPEN hOldPen = (HPEN)SelectObject(pDrawItem->hDC, hDarkMagPen);
223 INT xCenter = (pDrawItem->rcItem.left + pDrawItem->rcItem.right) / 2;
224 INT yCenter = (pDrawItem->rcItem.top + pDrawItem->rcItem.bottom - 10) / 2;
225 INT cx = pDrawItem->rcItem.right - pDrawItem->rcItem.left;
226 INT cy = pDrawItem->rcItem.bottom - pDrawItem->rcItem.top - 10;
227 INT xRadial = xCenter + (INT)(cos(M_PI + m_FreeSpacePerc / 100.0f * M_PI * 2.0f) * cx / 2);
228 INT yRadial = yCenter - (INT)(sin(M_PI + m_FreeSpacePerc / 100.0f * M_PI * 2.0f) * cy / 2);
229
230 TRACE("FreeSpace %u a %f cx %d\n", m_FreeSpacePerc, M_PI+m_FreeSpacePerc / 100.0f * M_PI * 2.0f, cx);
231
232 for (INT x = pDrawItem->rcItem.left; x < pDrawItem->rcItem.right; ++x)
233 {
234 double cos_val = (x - xCenter) * 2.0f / cx;
235 INT y = yCenter + (INT)(sin(acos(cos_val)) * cy / 2) - 1;
236 HPEN hCenterPen;
237
238 if (m_FreeSpacePerc < 50 && x == xRadial)
239 SelectObject(pDrawItem->hDC, hDarkBluePen);
240
241 /* Temporarily change pens to draw edges */
242 if (x == pDrawItem->rcItem.left)
243 hCenterPen = (HPEN)SelectObject(pDrawItem->hDC, hBlackPen);
244 else if (x == pDrawItem->rcItem.right - 1)
245 SelectObject(pDrawItem->hDC, hBlackPen);
246
247 MoveToEx(pDrawItem->hDC, x, y, NULL);
248 LineTo(pDrawItem->hDC, x, y + 10);
249 SetPixel(pDrawItem->hDC, x, y + 10, RGB(0, 0, 0));
250
251 /* Restore fill section pens */
252 if (x == pDrawItem->rcItem.left)
253 SelectObject(pDrawItem->hDC, hCenterPen);
254 }
255
256 SelectObject(pDrawItem->hDC, hBlackPen);
257
258 if (m_FreeSpacePerc > 50)
259 {
260 hbrOld = (HBRUSH)SelectObject(pDrawItem->hDC, hMagBrush);
261
262 Ellipse(pDrawItem->hDC, pDrawItem->rcItem.left, pDrawItem->rcItem.top,
263 pDrawItem->rcItem.right, pDrawItem->rcItem.bottom - 10);
264
265 SelectObject(pDrawItem->hDC, hBlueBrush);
266
267 if (m_FreeSpacePerc < 100)
268 {
269 Pie(pDrawItem->hDC, pDrawItem->rcItem.left, pDrawItem->rcItem.top, pDrawItem->rcItem.right,
270 pDrawItem->rcItem.bottom - 10, xRadial, yRadial, pDrawItem->rcItem.left, yCenter);
271 }
272 }
273 else
274 {
275 hbrOld = (HBRUSH)SelectObject(pDrawItem->hDC, hBlueBrush);
276
277 Ellipse(pDrawItem->hDC, pDrawItem->rcItem.left, pDrawItem->rcItem.top,
278 pDrawItem->rcItem.right, pDrawItem->rcItem.bottom - 10);
279
280 SelectObject(pDrawItem->hDC, hMagBrush);
281
282 if (m_FreeSpacePerc > 0)
283 {
284 Pie(pDrawItem->hDC, pDrawItem->rcItem.left, pDrawItem->rcItem.top, pDrawItem->rcItem.right,
285 pDrawItem->rcItem.bottom - 10, pDrawItem->rcItem.left, yCenter, xRadial, yRadial);
286 }
287 }
288
289 SelectObject(pDrawItem->hDC, hbrOld);
290 SelectObject(pDrawItem->hDC, hOldPen);
291
292 DeleteObject(hBlueBrush);
293 DeleteObject(hMagBrush);
294 DeleteObject(hDarkBluePen);
295 DeleteObject(hDarkMagPen);
296 }
297}
_STLP_DECLSPEC complex< float > _STLP_CALL cos(const complex< float > &)
_STLP_DECLSPEC complex< float > _STLP_CALL sin(const complex< float > &)
valarray< _Tp > acos(const valarray< _Tp > &__x)
Definition: _valarray.h:901
FORCEINLINE VOID SetPixel(_In_ ULONG Left, _In_ ULONG Top, _In_ UCHAR Color)
Definition: arm.h:55
#define RGB(r, g, b)
Definition: precomp.h:71
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define M_PI
Definition: macros.h:263
#define INT
Definition: polytest.cpp:20
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
int32_t INT
Definition: typedefs.h:58
HGDIOBJ WINAPI GetStockObject(_In_ int)
BOOL WINAPI Ellipse(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
#define BLACK_PEN
Definition: wingdi.h:903
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
#define PS_SOLID
Definition: wingdi.h:586
BOOL WINAPI Pie(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by GeneralPageProc().

◆ QueryContextMenu()

HRESULT WINAPI CDrvDefExt::QueryContextMenu ( HMENU  hmenu,
UINT  indexMenu,
UINT  idCmdFirst,
UINT  idCmdLast,
UINT  uFlags 
)
override

Implements IContextMenu.

Definition at line 728 of file drvdefext.cpp.

729{
731 return E_NOTIMPL;
732}

◆ ReplacePage()

HRESULT WINAPI CDrvDefExt::ReplacePage ( UINT  uPageID,
LPFNADDPROPSHEETPAGE  pfnReplacePage,
LPARAM  lParam 
)
override

Definition at line 785 of file drvdefext.cpp.

786{
788 return E_NOTIMPL;
789}

◆ SetSite()

HRESULT WINAPI CDrvDefExt::SetSite ( IUnknown punk)
override

Implements IObjectWithSite.

Definition at line 792 of file drvdefext.cpp.

793{
795 return E_NOTIMPL;
796}

Member Data Documentation

◆ m_FreeSpacePerc

UINT CDrvDefExt::m_FreeSpacePerc
private

Definition at line 40 of file drvdefext.h.

Referenced by InitGeneralPage(), and PaintStaticControls().

◆ m_wszDrive

WCHAR CDrvDefExt::m_wszDrive[MAX_PATH]
private

The documentation for this class was generated from the following files: