1 /* 2 * PROJECT: ReactOS Zip Shell Extension 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Ask the user to replace a file 5 * COPYRIGHT: Copyright 2017-2019 Mark Jansen (mark.jansen@reactos.org) 6 */ 7 8 #include "precomp.h" 9 10 class CConfirmReplace : public CDialogImpl<CConfirmReplace> 11 { 12 private: 13 CStringA m_Filename; 14 public: 15 16 CConfirmReplace(const char* filename) 17 : m_Filename(filename) 18 { 19 } 20 21 LRESULT OnInitDialog(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 22 { 23 CenterWindow(GetParent()); 24 25 HICON hIcon = LoadIcon(NULL, IDI_EXCLAMATION); 26 SendDlgItemMessage(IDC_EXCLAMATION_ICON, STM_SETICON, (WPARAM)hIcon); 27 28 /* Our CString does not support FormatMessage yet */ 29 CStringA message(MAKEINTRESOURCE(IDS_OVERWRITEFILE_TEXT)); 30 CHeapPtr<CHAR, CLocalAllocator> formatted; 31 32 DWORD_PTR args[2] = 33 { 34 (DWORD_PTR)m_Filename.GetString(), 35 NULL 36 }; 37 38 ::FormatMessageA(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_ARGUMENT_ARRAY, 39 message, 0, 0, (LPSTR)&formatted, 0, (va_list*)args); 40 41 ::SetDlgItemTextA(m_hWnd, IDC_MESSAGE, formatted); 42 return 0; 43 } 44 45 LRESULT OnButton(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 46 { 47 EndDialog(wID); 48 return 0; 49 } 50 51 public: 52 enum { IDD = IDD_CONFIRM_FILE_REPLACE }; 53 54 BEGIN_MSG_MAP(CConfirmReplace) 55 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 56 COMMAND_ID_HANDLER(IDYES, OnButton) 57 COMMAND_ID_HANDLER(IDYESALL, OnButton) 58 COMMAND_ID_HANDLER(IDNO, OnButton) 59 COMMAND_ID_HANDLER(IDCANCEL, OnButton) 60 END_MSG_MAP() 61 }; 62 63 64 eZipConfirmResponse _CZipAskReplace(HWND hDlg, PCSTR FullPath) 65 { 66 PCSTR Filename = PathFindFileNameA(FullPath); 67 CConfirmReplace confirm(Filename); 68 INT_PTR Result = confirm.DoModal(hDlg); 69 switch (Result) 70 { 71 case IDYES: return eYes; 72 case IDYESALL: return eYesToAll; 73 default: 74 case IDNO: return eNo; 75 case IDCANCEL: return eCancel; 76 } 77 } 78