ReactOS 0.4.15-dev-8434-g155a7c7
CCopyMoveToMenu.cpp File Reference
#include "precomp.h"
Include dependency graph for CCopyMoveToMenu.cpp:

Go to the source code of this file.

Enumerations

enum  { IDC_ACTION = 0 }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
static LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static INT CALLBACK BrowseCallbackProc (HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
 
static HRESULT DoGetFileTitle (const CIDA *pCIDA, CStringW &strTitle)
 
static BOOL GetPreviousMenuItemInfo (HMENU hMenu, UINT iItem, LPMENUITEMINFOW lpmii)
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
IDC_ACTION 

Definition at line 12 of file CCopyMoveToMenu.cpp.

12{ IDC_ACTION = 0 };
@ IDC_ACTION

Function Documentation

◆ BrowseCallbackProc()

static INT CALLBACK BrowseCallbackProc ( HWND  hwnd,
UINT  uMsg,
LPARAM  lParam,
LPARAM  lpData 
)
static

Definition at line 63 of file CCopyMoveToMenu.cpp.

64{
65 CCopyMoveToMenu *this_ =
67
68 switch (uMsg)
69 {
71 {
73 this_ = reinterpret_cast<CCopyMoveToMenu *>(lpData);
74
75 // Select initial directory
77 reinterpret_cast<LPARAM>(static_cast<LPCITEMIDLIST>(this_->m_pidlFolder)));
78
79 // Set caption
80 CString strCaption(MAKEINTRESOURCEW(this_->GetCaptionStringID()));
81 SetWindowTextW(hwnd, strCaption);
82
83 // Set OK button text
84 CString strCopyOrMove(MAKEINTRESOURCEW(this_->GetButtonStringID()));
85 SetDlgItemText(hwnd, IDOK, strCopyOrMove);
86
87 // Subclassing
88 this_->m_fnOldWndProc =
89 reinterpret_cast<WNDPROC>(
91
92 // Disable OK
94 break;
95 }
96 case BFFM_SELCHANGED:
97 {
98 if (!this_)
99 break;
100
102 LPCITEMIDLIST pidl = reinterpret_cast<LPCITEMIDLIST>(lParam);
103
104 szPath[0] = 0;
106
107 if (ILIsEqual(pidl, this_->m_pidlFolder))
109 else if (PathFileExistsW(szPath) || _ILIsDesktop(pidl))
111 else
113
114 // the text box will be updated later soon, ignore it
116 break;
117 }
118 }
119
120 return FALSE;
121}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
virtual UINT GetCaptionStringID() const =0
CComHeapPtr< ITEMIDLIST > m_pidlFolder
virtual UINT GetButtonStringID() const =0
virtual UINT GetFileOp() const =0
WNDPROC m_fnOldWndProc
LPARAM lParam
Definition: combotst.c:139
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define MAX_PATH
Definition: compat.h:34
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1777
LPCWSTR szPath
Definition: env.c:37
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1342
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:548
#define FO_COPY
Definition: shellapi.h:137
#define BFFM_SELCHANGED
Definition: shlobj.h:1237
#define BFFM_ENABLEOK
Definition: shlobj.h:1244
#define BFFM_SETSELECTION
Definition: shlobj.h:1256
#define BFFM_INITIALIZED
Definition: shlobj.h:1236
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_WNDPROC
Definition: treelist.c:66
#define GWLP_USERDATA
Definition: treelist.c:63
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IDOK
Definition: winuser.h:830
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2906
#define SetDlgItemText
Definition: winuser.h:5858
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ DoGetFileTitle()

static HRESULT DoGetFileTitle ( const CIDA pCIDA,
CStringW strTitle 
)
static

Definition at line 172 of file CCopyMoveToMenu.cpp.

173{
174 CComHeapPtr<ITEMIDLIST> pidlCombine(SHELL_CIDA_ILCloneFull(pCIDA, 0));
175 if (!pidlCombine)
176 return E_OUTOFMEMORY;
177
179 HRESULT hr = SHGetNameAndFlagsW(pidlCombine, SHGDN_INFOLDER, szPath, _countof(szPath), NULL);
180 strTitle = SUCCEEDED(hr) ? szPath : L"";
181 if (strTitle.IsEmpty())
182 return E_FAIL;
183
184 if (pCIDA->cidl > 1)
185 strTitle += L" ...";
186 return S_OK;
187}
bool IsEmpty() const noexcept
Definition: atlsimpstr.h:394
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
PIDLIST_ABSOLUTE SHELL_CIDA_ILCloneFull(_In_ const CIDA *pCIDA, _In_ UINT Index)
HRESULT SHGetNameAndFlagsW(_In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_opt_ LPWSTR pszText, _In_ UINT cchBuf, _Inout_opt_ DWORD *pdwAttributes)
Definition: utils.cpp:289
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define L(x)
Definition: ntvdm.h:50
HRESULT hr
Definition: shlfolder.c:183
#define _countof(array)
Definition: sndvol32.h:70
UINT cidl
Definition: shlobj.h:572

Referenced by CCopyMoveToMenu::DoAction().

◆ GetPreviousMenuItemInfo()

static BOOL GetPreviousMenuItemInfo ( HMENU  hMenu,
UINT  iItem,
LPMENUITEMINFOW  lpmii 
)
static

Definition at line 230 of file CCopyMoveToMenu.cpp.

231{
233
234 while (iItem > 0)
235 {
236 bSuccess = GetMenuItemInfoW(hMenu, --iItem, TRUE, lpmii);
238 break;
239 }
240
241 return bSuccess;
242}
static BOOLEAN bSuccess
Definition: drive.cpp:477
unsigned int BOOL
Definition: ntddk_ex.h:94
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define ERROR_MENU_ITEM_NOT_FOUND
Definition: winerror.h:937
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)

Referenced by CCopyMoveToMenu::QueryContextMenuImpl().

◆ WindowProc()

static LRESULT CALLBACK WindowProc ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 21 of file CCopyMoveToMenu.cpp.

22{
24 CCopyMoveToMenu *this_ =
26
27 switch (uMsg)
28 {
29 case WM_COMMAND:
30 {
31 switch (LOWORD(wParam))
32 {
34 {
35 if (HIWORD(wParam) == EN_CHANGE)
36 {
37 if (!this_->m_bIgnoreTextBoxChange)
38 {
39 // get the text
41 StrTrimW(szPath, L" \t");
42
43 // update OK button
45 SendMessageW(hwnd, BFFM_ENABLEOK, 0, bValid);
46
47 return 0;
48 }
49
50 // reset flag
52 }
53 break;
54 }
55 }
56 break;
57 }
58 }
59 return CallWindowProcW(this_->m_fnOldWndProc, hwnd, uMsg, wParam, lParam);
60}
WPARAM wParam
Definition: combotst.c:138
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1723
BOOL WINAPI StrTrimW(LPWSTR lpszStr, LPCWSTR lpszTrim)
Definition: string.c:1877
#define LOWORD(l)
Definition: pedump.c:82
#define PathIsRelative
Definition: shlwapi.h:951
#define IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT
Definition: shresdef.h:439
#define HIWORD(l)
Definition: typedefs.h:247
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2263
#define WM_COMMAND
Definition: winuser.h:1740
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define EN_CHANGE
Definition: winuser.h:2022

Referenced by BrowseCallbackProc().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )