ReactOS 0.4.15-dev-8434-g155a7c7
CDefView.cpp
Go to the documentation of this file.
1/*
2 * ShellView
3 *
4 * Copyright 1998,1999 <juergen.schmied@debitel.net>
5 * Copyright 2022 Russell Johnson <russell.johnson@superdark.net>
6 *
7 * This is the view visualizing the data provided by the shellfolder.
8 * No direct access to data from pidls should be done from here.
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 *
24 * FIXME: CheckToolbar: handle the "new folder" and "folder up" button
25 */
26
27/*
28TODO:
29- When editing starts on item, set edit text to for editing value.
30- Fix shell view to handle view mode popup exec.
31- The background context menu should have a pidl just like foreground menus. This
32 causes crashes when dynamic handlers try to use the NULL pidl.
33- Reorder of columns doesn't work - might be bug in comctl32
34*/
35
36#include "precomp.h"
37
38#include <atlwin.h>
39#include <ui/rosctrls.h>
40
42
43// It would be easier to allocate these from 1 and up but the original code used the entire
44// FCIDM_SHVIEWFIRST..FCIDM_SHVIEWLAST range when dealing with IContextMenu and to avoid
45// breaking anything relying on this we will allocate our ranges from the end instead.
46enum {
47 DEFVIEW_ARRANGESORT_MAXENUM = 9, // Limit the number of the visible columns we will display in the submenu
48 DEFVIEW_ARRANGESORT_MAX = DEFVIEW_ARRANGESORT_MAXENUM + 1, // Reserve one extra for the current sort-by column
51
53 // FIXME: FCIDM_SHVIEWFIRST is 0 and using that with QueryContextMenu is a
54 // bad idea because it hides bugs related to the ids in ici.lpVerb.
55 // CONTEXT_MENU_BASE_ID acknowledges this but failed to apply the fix everywhere.
57};
58#undef FCIDM_SHVIEWLAST // Don't use this constant, change DVIDM_CONTEXTMENU_LAST if you need a new id.
59
60typedef struct
61{
65 UINT8 Reserved; // Unused
67
68 enum { UNSPECIFIEDCOLUMN = -1 };
69 void Reset()
70 {
71 *(UINT*)this = 0;
72 ListColumn = UNSPECIFIEDCOLUMN;
73 }
75
76#define SHV_CHANGE_NOTIFY (WM_USER + 0x1111)
77#define SHV_UPDATESTATUSBAR (WM_USER + 0x1112)
78
79// For the context menu of the def view, the id of the items are based on 1 because we need
80// to call TrackPopupMenu and let it use the 0 value as an indication that the menu was canceled
81#define CONTEXT_MENU_BASE_ID 1
82
84{
85 enum { MAXCOUNT = 100 };
86 static const UINT SIG = ('R' << 0) | ('O' << 8) | ('S' << 16) | (('c') << 24);
90};
91
93{
94 static const UINT SIG = ('R' << 0) | ('O' << 8) | ('S' << 16) | (('c' ^ 'v' ^ 's') << 24);
98 static const UINT VALIDFWF = FWF_AUTOARRANGE | FWF_SNAPTOGRID | FWF_NOGROUPING; // Note: The desktop applies FWF_NOICONS when appropriate
100};
101
102static UINT
104{
105 UINT cmf = CMF_NORMAL;
106 if (GetKeyState(VK_SHIFT) < 0)
107 cmf |= CMF_EXTENDEDVERBS;
108 if (sfgao & SFGAO_CANRENAME)
109 cmf |= CMF_CANRENAME;
110 HWND hwnd = NULL;
111 if (pSB && SUCCEEDED(pSB->GetControlWindow(FCW_TREE, &hwnd)) && hwnd)
112 cmf |= CMF_EXPLORE;
113 return cmf;
114}
115
116// Convert client coordinates to listview coordinates
117static void
119{
120 POINT Origin = {};
121
122 // FIXME: LVM_GETORIGIN is broken. See CORE-17266
123 if (!ListView_GetOrigin(hwndLV, &Origin))
124 return;
125
126 ppt->x += Origin.x;
127 ppt->y += Origin.y;
128}
129
130// Helper struct to automatically cleanup the IContextMenu
131// We want to explicitly reset the Site, so there are no circular references
133{
136
138 : m_pCM(pCM), m_hMenu(menu)
139 {
140 }
142 {
143 if (m_hMenu)
144 {
146 m_hMenu = NULL;
147 }
148 if (m_pCM)
149 {
151 m_pCM.Release();
152 }
153 }
154};
155
157{
158 MENUITEMINFOW mii;
159 mii.cbSize = sizeof(mii);
161 mii.fState = MF & (MFS_CHECKED | MFS_DISABLED);
162 mii.fType = MF & ~mii.fState;
163 mii.wID = Id;
164 mii.dwTypeData = const_cast<LPWSTR>(String);
165 mii.dwItemData = Data;
166 return InsertMenuItemW(hMenu, -1, TRUE, &mii);
167}
168
170{
171 MENUITEMINFOW mii;
172 mii.cbSize = FIELD_OFFSET(MENUITEMINFOW, hbmpItem);
173 mii.fMask = MIIM_DATA;
174 if (GetMenuItemInfoW(hMenu, Id, FALSE, &mii))
175 return mii.dwItemData;
176 else
177 return 0;
178}
179
181{
182 MENUITEMINFOW mii = {sizeof(mii), MIIM_SUBMENU};
183 if (::GetMenuItemInfoW(hmenu, id, FALSE, &mii))
184 return mii.hSubMenu;
185
186 return NULL;
187}
188
189/* ReallyGetMenuItemID returns the id of an item even if it opens a submenu,
190 GetMenuItemID returns -1 if the specified item opens a submenu */
192{
193 MENUITEMINFOW mii = {sizeof(mii), MIIM_ID};
194 if (::GetMenuItemInfoW(hmenu, i, TRUE, &mii))
195 return mii.wID;
196
197 return UINT_MAX;
198}
199
201{
202 UINT ret = 0;
203 HDC hDC = GetDC(hwnd);
204 if (hDC)
205 {
208 SelectObject(hDC, hOrg);
210 }
211 return ret;
212}
213
214class CDefView :
215 public CWindowImpl<CDefView, CWindow, CControlWinTraits>,
216 public CComObjectRootEx<CComMultiThreadModelNoCS>,
217 public IShellView3,
218 public IFolderView,
219 public IShellFolderView,
220 public IOleCommandTarget,
221 public IDropTarget,
222 public IDropSource,
223 public IViewObject,
224 public IServiceProvider
225{
226private:
237 HMENU m_hMenu; // Handle to the menu bar of the browser
238 HMENU m_hMenuArrangeModes; // Handle to the popup menu with the arrange modes
239 HMENU m_hMenuViewModes; // Handle to the popup menu with the view modes
240 HMENU m_hContextMenu; // Handle to the open context menu
249 ULONG m_hNotify; // Change notification handle
250 HACCEL m_hAccel;
254 // for drag and drop
256 CComPtr<IDropTarget> m_pCurDropTarget; // The sub-item, which is currently dragged over
257 CComPtr<IDataObject> m_pCurDataObject; // The dragged data-object
258 LONG m_iDragOverItem; // Dragged over item's index, if m_pCurDropTarget != NULL
259 UINT m_cScrollDelay; // Send a WM_*SCROLL msg every 250 ms during drag-scroll
260 POINT m_ptLastMousePos; // Mouse position at last DragOver call
261 POINT m_ptFirstMousePos; // Mouse position when the drag operation started
263 //
266
270
274
276
278 BOOL _Sort(int Col = -1);
285 void _DoCopyToMoveToFolder(BOOL bCopy);
287
288public:
289 CDefView();
290 ~CDefView();
295 void UpdateStatusbar();
296 void CheckToolbar();
298 void UpdateListColors();
299 BOOL InitList();
300 static INT CALLBACK ListViewCompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData);
301
306 HRESULT LoadColumn(UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth = 0);
307 HRESULT LoadColumns(SIZE_T *pColList = NULL, UINT ColListCount = 0);
308 void ColumnListChanged();
312 int LV_AddItem(PCUITEMID_CHILD pidl);
316 void LV_RefreshIcon(INT iItem);
317 void LV_RefreshIcons();
319 HRESULT FillList(BOOL IsRefreshCommand = TRUE);
323 HRESULT FillArrangeAsMenu(HMENU hmenuArrange);
324 HRESULT CheckViewMode(HMENU hmenuView);
328 void OnDeactivate();
329 void DoActivate(UINT uState);
330 HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
332 LRESULT OnExplorerCommand(UINT uCommand, BOOL bUseSelection);
334 HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream);
336 HRESULT SaveViewState(IStream *pStream);
338
339 // *** IOleWindow methods ***
340 STDMETHOD(GetWindow)(HWND *lphwnd) override;
341 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override;
342
343 // *** IShellView methods ***
344 STDMETHOD(TranslateAccelerator)(MSG *pmsg) override;
345 STDMETHOD(EnableModeless)(BOOL fEnable) override;
346 STDMETHOD(UIActivate)(UINT uState) override;
347 STDMETHOD(Refresh)() override;
348 STDMETHOD(CreateViewWindow)(IShellView *psvPrevious, LPCFOLDERSETTINGS pfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd) override;
349 STDMETHOD(DestroyViewWindow)() override;
352 STDMETHOD(SaveViewState)() override;
353 STDMETHOD(SelectItem)(PCUITEMID_CHILD pidlItem, SVSIF uFlags) override;
354 STDMETHOD(GetItemObject)(UINT uItem, REFIID riid, void **ppv) override;
355
356 // *** IShellView2 methods ***
357 STDMETHOD(GetView)(SHELLVIEWID *view_guid, ULONG view_type) override;
358 STDMETHOD(CreateViewWindow2)(LPSV2CVW2_PARAMS view_params) override;
359 STDMETHOD(HandleRename)(LPCITEMIDLIST new_pidl) override;
361
362 // *** IShellView3 methods ***
364 IShellBrowser *psb,
365 IShellView *psvPrevious,
366 SV3CVW3_FLAGS view_flags,
370 const SHELLVIEWID *view_id,
371 const RECT *prcView,
372 HWND *hwnd) override;
373
374 // *** IFolderView methods ***
375 STDMETHOD(GetCurrentViewMode)(UINT *pViewMode) override;
376 STDMETHOD(SetCurrentViewMode)(UINT ViewMode) override;
377 STDMETHOD(GetFolder)(REFIID riid, void **ppv) override;
378 STDMETHOD(Item)(int iItemIndex, PITEMID_CHILD *ppidl) override;
379 STDMETHOD(ItemCount)(UINT uFlags, int *pcItems) override;
380 STDMETHOD(Items)(UINT uFlags, REFIID riid, void **ppv) override;
381 STDMETHOD(GetSelectionMarkedItem)(int *piItem) override;
382 STDMETHOD(GetFocusedItem)(int *piItem) override;
383 STDMETHOD(GetItemPosition)(PCUITEMID_CHILD pidl, POINT *ppt) override;
384 STDMETHOD(GetSpacing)(POINT *ppt) override;
385 STDMETHOD(GetDefaultSpacing)(POINT *ppt) override;
386 STDMETHOD(GetAutoArrange)() override;
387 STDMETHOD(SelectItem)(int iItem, DWORD dwFlags) override;
389
390 // *** IShellFolderView methods ***
391 STDMETHOD(Rearrange)(LPARAM sort) override;
393 STDMETHOD(ArrangeGrid)() override;
394 STDMETHOD(AutoArrange)() override;
395 STDMETHOD(AddObject)(PITEMID_CHILD pidl, UINT *item) override;
396 STDMETHOD(GetObject)(PITEMID_CHILD *pidl, UINT item) override;
397 STDMETHOD(RemoveObject)(PITEMID_CHILD pidl, UINT *item) override;
400 STDMETHOD(UpdateObject)(PITEMID_CHILD pidl_old, PITEMID_CHILD pidl_new, UINT *item) override;
402 STDMETHOD(SetRedraw)(BOOL redraw) override;
405 STDMETHOD(IsDropOnSource)(IDropTarget *drop_target) override;
406 STDMETHOD(GetDragPoint)(POINT *pt) override;
407 STDMETHOD(GetDropPoint)(POINT *pt) override;
409 STDMETHOD(SetItemPos)(PCUITEMID_CHILD pidl, POINT *pt) override;
410 STDMETHOD(IsBkDropTarget)(IDropTarget *drop_target) override;
411 STDMETHOD(SetClipboard)(BOOL move) override;
413 STDMETHOD(GetItemSpacing)(ITEMSPACING *spacing) override;
414 STDMETHOD(SetCallback)(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb) override;
415 STDMETHOD(Select)(UINT flags) override;
416 STDMETHOD(QuerySupport)(UINT *support) override;
417 STDMETHOD(SetAutomationObject)(IDispatch *disp) override;
418
419 // *** IOleCommandTarget methods ***
420 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override;
421 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override;
422
423 // *** IDropTarget methods ***
424 STDMETHOD(DragEnter)(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
425 STDMETHOD(DragOver)(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
426 STDMETHOD(DragLeave)() override;
427 STDMETHOD(Drop)(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
428
429 // *** IDropSource methods ***
430 STDMETHOD(QueryContinueDrag)(BOOL fEscapePressed, DWORD grfKeyState) override;
431 STDMETHOD(GiveFeedback)(DWORD dwEffect) override;
432
433 // *** IViewObject methods ***
434 STDMETHOD(Draw)(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd,
435 HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds,
436 BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue) override;
437 STDMETHOD(GetColorSet)(DWORD dwDrawAspect, LONG lindex, void *pvAspect,
438 DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet) override;
439 STDMETHOD(Freeze)(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) override;
440 STDMETHOD(Unfreeze)(DWORD dwFreeze) override;
441 STDMETHOD(SetAdvise)(DWORD aspects, DWORD advf, IAdviseSink *pAdvSink) override;
442 STDMETHOD(GetAdvise)(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) override;
443
444 // *** IServiceProvider methods ***
445 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override;
446
447 // Message handlers
450 LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
456 LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
458 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
462 LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
463 LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
469
470 virtual VOID OnFinalMessage(HWND) override;
471
473 {
474 static ATL::CWndClassInfo wc =
475 {
477 0, 0, NULL, NULL,
478 LoadCursor(NULL, IDC_ARROW), NULL, NULL, L"SHELLDLL_DefView", NULL
479 },
480 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
481 };
482 return wc;
483 }
484
486 {
487 return WindowProc;
488 }
489
491 {
492 CDefView *pThis;
494
495 // Must hold a reference during message handling
496 pThis = reinterpret_cast<CDefView *>(hWnd);
497 pThis->AddRef();
499 pThis->Release();
500 return result;
501 }
502
527
529 // Windows returns E_NOINTERFACE for IOleWindow
530 // COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
531 COM_INTERFACE_ENTRY_IID(IID_IShellView, IShellView)
533 COM_INTERFACE_ENTRY_IID(IID_IShellView2, IShellView2)
534 COM_INTERFACE_ENTRY_IID(IID_IShellView3, IShellView3)
535 COM_INTERFACE_ENTRY_IID(IID_IFolderView, IFolderView)
536 COM_INTERFACE_ENTRY_IID(IID_IShellFolderView, IShellFolderView)
537 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
538 COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget)
539 COM_INTERFACE_ENTRY_IID(IID_IDropSource, IDropSource)
541 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
543};
544
545#define ID_LISTVIEW 1
546
547// windowsx.h
548#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp)
549#define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp)
550#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp)
551
553
555 m_ListView(),
557 m_hMenu(NULL),
562 m_uState(0),
563 m_cidl(0),
564 m_apidl(NULL),
567 m_hNotify(0),
568 m_hAccel(NULL),
569 m_dwAspects(0),
570 m_dwAdvf(0),
577{
584
588}
589
591{
592 TRACE(" destroying IShellView(%p)\n", this);
593
595
597 {
600 }
601
602 if (m_hWnd)
603 {
605 }
606
610}
611
613{
614 m_pSFParent = shellFolder;
616 shellFolder->QueryInterface(IID_PPV_ARG(IShellDetails, &m_pSDParent));
617
618 return S_OK;
619}
620
621// ##### helperfunctions for communication with ICommDlgBrowser #####
622
624{
625 HRESULT ret = S_OK;
626
627 if (m_pCommDlgBrowser.p != NULL)
628 {
629 TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
630 ret = m_pCommDlgBrowser->IncludeObject(this, pidl);
631 TRACE("-- returns 0x%08x\n", ret);
632 }
633
634 return ret;
635}
636
638{
640
641 if (m_pCommDlgBrowser.p != NULL)
642 {
643 TRACE("ICommDlgBrowser::OnDefaultCommand\n");
644 ret = m_pCommDlgBrowser->OnDefaultCommand(this);
645 TRACE("-- returns 0x%08x\n", ret);
646 }
647
648 return ret;
649}
650
652{
654
655 if (m_pCommDlgBrowser.p != NULL)
656 {
657 TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
658 ret = m_pCommDlgBrowser->OnStateChange(this, uFlags);
659 TRACE("--\n");
660 }
661
662 return ret;
663}
664/**********************************************************
665 * set the toolbar of the filedialog buttons
666 *
667 * - activates the buttons from the shellbrowser according to
668 * the view state
669 */
671{
673
674 TRACE("\n");
675
676 if (m_pCommDlgBrowser != NULL)
677 {
678 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
680 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
682 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
684 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
686 }
687}
688
690{
691 WCHAR szFormat[MAX_PATH] = {0};
692 WCHAR szPartText[MAX_PATH] = {0};
693 UINT cSelectedItems;
694
695 if (!m_ListView)
696 return;
697
698 cSelectedItems = m_ListView.GetSelectedCount();
699 if (cSelectedItems)
700 {
702 StringCchPrintfW(szPartText, _countof(szPartText), szFormat, cSelectedItems);
703 }
704 else
705 {
706 LoadStringW(shell32_hInstance, IDS_OBJECTS, szFormat, _countof(szFormat));
707 StringCchPrintfW(szPartText, _countof(szPartText), szFormat, m_ListView.GetItemCount());
708 }
709
710 LRESULT lResult;
711 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 0, (LPARAM)szPartText, &lResult);
712
713 // Don't bother with the extra processing if we only have one StatusBar part
715 {
716 UINT64 uTotalFileSize = 0;
717 WORD uFileFlags = LVNI_ALL;
718 LPARAM pIcon = NULL;
719 INT nItem = -1;
720 bool bIsOnlyFoldersSelected = true;
721
722 // If we have something selected then only count selected file sizes
723 if (cSelectedItems)
724 {
725 uFileFlags = LVNI_SELECTED;
726 }
727
728 while ((nItem = m_ListView.GetNextItem(nItem, uFileFlags)) >= 0)
729 {
730 PCUITEMID_CHILD pidl = _PidlByItem(nItem);
731
732 uTotalFileSize += _ILGetFileSize(pidl, NULL, 0);
733
734 if (!_ILIsFolder(pidl))
735 {
736 bIsOnlyFoldersSelected = false;
737 }
738 }
739
740 // Don't show the file size text if there is 0 bytes in the folder
741 // OR we only have folders selected
742 if ((cSelectedItems && !bIsOnlyFoldersSelected) || uTotalFileSize)
743 {
744 StrFormatByteSizeW(uTotalFileSize, szPartText, _countof(szPartText));
745 }
746 else
747 {
748 *szPartText = 0;
749 }
750
751 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 1, (LPARAM)szPartText, &lResult);
752
753 // If we are in a Recycle Bin then show no text for the location part
755 {
756 LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szPartText, _countof(szPartText));
757 pIcon = (LPARAM)m_hMyComputerIcon;
758 }
759
760 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETICON, 2, pIcon, &lResult);
761 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 2, (LPARAM)szPartText, &lResult);
762 }
763
764 SFGAOF att = 0;
765 if (cSelectedItems > 0)
766 {
767 UINT maxquery = 42; // Checking the attributes can be slow, only check small selections (_DoCopyToMoveToFolder will verify the full array)
768 att = SFGAO_CANCOPY | SFGAO_CANMOVE;
769 if (cSelectedItems <= maxquery && (!GetSelections() || FAILED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &att))))
770 att = 0;
771 }
772 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, FCIDM_SHVIEW_COPYTO, (att & SFGAO_CANCOPY) != 0, &lResult);
773 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, FCIDM_SHVIEW_MOVETO, (att & SFGAO_CANMOVE) != 0, &lResult);
774}
775
777{
780 return 0;
781}
782
783
784// ##### helperfunctions for initializing the view #####
785
786// creates the list view window
788{
789 HRESULT hr;
790 DWORD dwStyle, dwExStyle, ListExStyle;
791 UINT ViewMode;
792
793 TRACE("%p\n", this);
794
796 LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_AUTOARRANGE; // FIXME: Remove LVS_AUTOARRANGE when the view is able to save ItemPos
798 ListExStyle = LVS_EX_INFOTIP | LVS_EX_LABELTIP;
799
801 {
803 dwStyle |= LVS_ALIGNLEFT;
804 // LVS_EX_REGIONAL?
805 }
806 else
807 {
808 dwStyle |= LVS_SHOWSELALWAYS; // MSDN says FWF_SHOWSELALWAYS is deprecated, always turn on for folders
810 ListExStyle |= LVS_EX_DOUBLEBUFFER;
811 }
812
813 ViewMode = m_FolderSettings.ViewMode;
814 hr = _DoFolderViewCB(SFVM_DEFVIEWMODE, 0, (LPARAM)&ViewMode);
815 if (SUCCEEDED(hr))
816 {
817 if (ViewMode >= FVM_FIRST && ViewMode <= FVM_LAST)
818 m_FolderSettings.ViewMode = ViewMode;
819 else
820 ERR("Ignoring invalid ViewMode from SFVM_DEFVIEWMODE: %u (was: %u)\n", ViewMode, m_FolderSettings.ViewMode);
821 }
822
824 {
825 case FVM_ICON:
826 dwStyle |= LVS_ICON;
827 break;
828 case FVM_DETAILS:
829 dwStyle |= LVS_REPORT;
830 break;
831 case FVM_SMALLICON:
832 dwStyle |= LVS_SMALLICON;
833 break;
834 case FVM_LIST:
835 dwStyle |= LVS_LIST;
836 break;
837 default:
838 dwStyle |= LVS_LIST;
839 break;
840 }
841
843 dwStyle |= LVS_AUTOARRANGE;
844
846 ListExStyle |= LVS_EX_SNAPTOGRID;
847
849 dwStyle |= LVS_SINGLESEL;
850
852 ListExStyle |= LVS_EX_FULLROWSELECT;
853
855 (!SHELL_GetSetting(SSF_DOUBLECLICKINWEBVIEW, fDoubleClickInWebView) && !SHELL_GetSetting(SSF_WIN95CLASSIC, fWin95Classic)))
857
859 dwStyle |= LVS_NOCOLUMNHEADER;
860
861#if 0
862 // FIXME: Because this is a negative, everyone gets the new flag by default unless they
863 // opt out. This code should be enabled when shell looks like Vista instead of 2003
865 ListExStyle |= LVS_EX_HEADERINALLVIEWS;
866#endif
867
869 dwExStyle &= ~WS_EX_CLIENTEDGE;
870
871 RECT rcListView = {0,0,0,0};
872 m_ListView.Create(m_hWnd, rcListView, L"FolderView", dwStyle, dwExStyle, ID_LISTVIEW);
873
874 if (!m_ListView)
875 return FALSE;
876
878
879 /* UpdateShellSettings(); */
880 return TRUE;
881}
882
884{
886 {
887 /* Check if drop shadows option is enabled */
888 BOOL bDropShadow = FALSE;
889 DWORD cbDropShadow = sizeof(bDropShadow);
890
891 /*
892 * The desktop ListView always take the default desktop colours, by
893 * remaining transparent and letting user32/win32k paint itself the
894 * desktop background color, if any.
895 */
897
898 SHGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
899 L"ListviewShadow", NULL, &bDropShadow, &cbDropShadow);
900 if (bDropShadow)
901 {
902 /* Set the icon background transparent */
904 m_ListView.SetTextColor(RGB(255, 255, 255));
905 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTSHADOWTEXT, LVS_EX_TRANSPARENTSHADOWTEXT);
906 }
907 else
908 {
909 /* Set the icon background as the same colour as the desktop */
911 m_ListView.SetTextBkColor(crDesktop);
912 if (GetRValue(crDesktop) + GetGValue(crDesktop) + GetBValue(crDesktop) > 128 * 3)
913 m_ListView.SetTextColor(RGB(0, 0, 0));
914 else
915 m_ListView.SetTextColor(RGB(255, 255, 255));
916 m_ListView.SetExtendedListViewStyle(0, LVS_EX_TRANSPARENTSHADOWTEXT);
917 }
918 }
919 else
920 {
921 // text background color
923 m_ListView.SetTextBkColor(clrTextBack);
924
925 // text color
926 COLORREF clrText;
928 clrText = m_viewinfo_data.clrText;
929 else
930 clrText = GetSysColor(COLOR_WINDOWTEXT);
931
932 m_ListView.SetTextColor(clrText);
933
934 // Background is painted by the parent via WM_PRINTCLIENT
935 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTBKGND, LVS_EX_TRANSPARENTBKGND);
936 }
937}
938
939// adds all needed columns to the shellview
941{
942 HIMAGELIST big_icons, small_icons;
943
944 TRACE("%p\n", this);
945
947
948 Shell_GetImageLists(&big_icons, &small_icons);
950 m_ListView.SetImageList(small_icons, LVSIL_SMALL);
951
953
955 UINT ColumnCount = pColumns ? DPA_GetPtrCount(m_LoadColumnsList) : 0;
956 LoadColumns(pColumns, ColumnCount);
958 {
962 }
963 return TRUE;
964}
965
966/**********************************************************
967* Column handling
968*/
970{
971 LVCOLUMN lvc;
972 lvc.mask = LVCF_SUBITEM;
973 if (!ListView_GetColumn(List, Col, &lvc))
974 return E_FAIL;
975 else
976 return lvc.iSubItem;
977}
978
980{
981 // This function is only called during column management, performance is not critical.
982 for (UINT i = 0;; ++i)
983 {
985 if ((UINT)r == FoldCol)
986 return i;
987 else if (FAILED(r))
988 return r;
989 }
990}
991
993{
994 // This function is called every time a LVITEM::iSubItem is mapped to
995 // a folder column (calls to GetDetailsOf etc.) and should be fast.
997 {
999 if (ListCol < count)
1000 {
1002 assert(col >= 0 && col == SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol));
1003 return col;
1004 }
1005 else if (count)
1006 {
1007 TRACE("m_ListToFolderColMap cache miss while mapping %d\n", ListCol);
1008 }
1009 }
1010 return SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol);
1011}
1012
1014{
1015 // According to learn.microsoft.com/en-us/windows/win32/shell/sfvm-getdetailsof
1016 // the query order is IShellFolder2, IShellDetails, SFVM_GETDETAILSOF.
1017 HRESULT hr;
1018 if (m_pSF2Parent)
1019 {
1020 hr = m_pSF2Parent->GetDetailsOf(pidl, FoldCol, &sd);
1021 }
1022 if (FAILED(hr) && m_pSDParent)
1023 {
1024 hr = m_pSDParent->GetDetailsOf(pidl, FoldCol, &sd);
1025 }
1026#if 0 // TODO
1027 if (FAILED(hr))
1028 {
1029 FIXME("Try SFVM_GETDETAILSOF\n");
1030 }
1031#endif
1032 return hr;
1033}
1034
1036{
1038 if (SUCCEEDED(hr))
1039 return GetDetailsByFolderColumn(pidl, hr, sd);
1040 ERR("Unable to determine folder column from list column %d\n", (int) ListCol);
1041 return hr;
1042}
1043
1044HRESULT CDefView::LoadColumn(UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth)
1045{
1048 HRESULT hr;
1049
1050 sd.str.uType = !STRRET_WSTR; // Make sure "uninitialized" uType is not WSTR
1051 hr = GetDetailsByFolderColumn(NULL, FoldCol, sd);
1052 if (FAILED(hr))
1053 return hr;
1054 hr = StrRetToStrNW(buf, _countof(buf), &sd.str, NULL);
1055 if (FAILED(hr))
1056 return hr;
1057
1058 UINT chavewidth = CalculateCharWidth(m_ListView.m_hWnd);
1059 if (!chavewidth)
1060 chavewidth = 6; // 6 is a reasonable default fallback
1061
1062 LVCOLUMN lvc;
1063 lvc.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM;
1064 lvc.pszText = buf;
1065 lvc.fmt = sd.fmt;
1066 lvc.cx = ForceWidth ? ForceWidth : (sd.cxChar * chavewidth); // FIXME: DPI?
1067 lvc.iSubItem = FoldCol; // Used by MapFolderColumnToListColumn & MapListColumnToFolderColumn
1068 if ((int)ListCol == -1)
1069 {
1070 assert(Insert); // You can insert at the end but you can't change something that is not there
1071 if (Insert)
1072 ListCol = 0x7fffffff;
1073 }
1074 if (Insert)
1075 ListView_InsertColumn(m_ListView.m_hWnd, ListCol, &lvc);
1076 else
1077 ListView_SetColumn(m_ListView.m_hWnd, ListCol, &lvc);
1078 return S_OK;
1079}
1080
1082{
1083 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
1084 UINT newColCount = 0, oldColCount = Header_GetItemCount(hWndHdr);
1085 UINT width = 0, foldCol, i;
1086 HRESULT hr = S_FALSE;
1087
1089 for (i = 0, foldCol = 0;; ++foldCol)
1090 {
1091 if (newColCount >= 0xffff)
1092 break; // CompareIDs limit reached
1093
1094 if (pColList)
1095 {
1096 if (i >= ColListCount)
1097 break;
1098 width = HIWORD(pColList[i]);
1099 foldCol = LOWORD(pColList[i++]);
1100 }
1101
1102 SHCOLSTATEF state = 0;
1103 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
1105
1106 if (foldCol == 0)
1107 {
1108 // Force the first column
1109 }
1110 else if (state & SHCOLSTATE_HIDDEN)
1111 {
1112 continue;
1113 }
1114 else if (!pColList && !(state & SHCOLSTATE_ONBYDEFAULT))
1115 {
1116 continue;
1117 }
1118
1119 bool insert = newColCount >= oldColCount;
1120 UINT listCol = insert ? -1 : newColCount;
1121 hr = LoadColumn(foldCol, listCol, insert, width);
1122 if (FAILED(hr))
1123 {
1124 if (!pColList)
1125 hr = S_OK; // No more items, we are done
1126 break;
1127 }
1128 ++newColCount;
1129 }
1130 for (i = newColCount; i < oldColCount; ++i)
1131 {
1133 }
1134
1137 assert(SUCCEEDED(MapFolderColumnToListColumn(0))); // We don't allow turning off the Name column
1139 {
1142 }
1143 return hr;
1144}
1145
1147{
1149 m_ListToFolderColMap = NULL; // No cache while we are building the cache
1151 for (UINT i = 0;; ++i)
1152 {
1154 if (FAILED(hr))
1155 break; // No more columns
1156 if (!DPA_SetPtr(cache, i, (void*)(INT_PTR) hr))
1157 break; // Cannot allow holes in the cache, must stop now.
1158 }
1160
1161 for (;;)
1162 {
1164 break;
1165 }
1167 if (hMenu)
1168 {
1169 hMenu = GetSubmenuByID(hMenu, FCIDM_SHVIEW_ARRANGE);
1170 for (UINT i = DVIDM_ARRANGESORT_FIRST; i <= DVIDM_ARRANGESORT_LAST && hMenu; ++i)
1171 {
1172 RemoveMenu(hMenu, i, MF_BYCOMMAND);
1173 }
1174 if ((int) GetMenuItemID(hMenu, 0) <= 0)
1175 RemoveMenu(hMenu, 0, MF_BYPOSITION); // Separator
1176 }
1178 LVCOLUMN lvc;
1179 lvc.mask = LVCF_TEXT;
1180 lvc.pszText = buf;
1181 lvc.cchTextMax = _countof(buf);
1182 for (UINT listCol = 0; listCol < DEFVIEW_ARRANGESORT_MAXENUM; ++listCol)
1183 {
1184 if (!ListView_GetColumn(m_ListView.m_hWnd, listCol, &lvc))
1185 break;
1186 HRESULT foldCol = MapListColumnToFolderColumn(listCol);
1187 assert(SUCCEEDED(foldCol));
1189 DVIDM_ARRANGESORT_FIRST + listCol, lvc.pszText, listCol);
1190 }
1191
1192 ListView_RedrawItems(m_ListView.m_hWnd, 0, 0x7fffffff);
1193 m_ListView.InvalidateRect(NULL, TRUE);
1194}
1195
1196/*************************************************************************
1197 * ShellView_ListViewCompareItems
1198 *
1199 * Compare Function for the Listview (FileOpen Dialog)
1200 *
1201 * PARAMS
1202 * lParam1 [I] the first ItemIdList to compare with
1203 * lParam2 [I] the second ItemIdList to compare with
1204 * lpData [I] The column ID for the header Ctrl to process
1205 *
1206 * RETURNS
1207 * A negative value if the first item should precede the second,
1208 * a positive value if the first item should follow the second,
1209 * or zero if the two items are equivalent
1210 */
1212{
1213 PCUIDLIST_RELATIVE pidl1 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam1);
1214 PCUIDLIST_RELATIVE pidl2 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam2);
1215 CDefView *pThis = reinterpret_cast<CDefView*>(lpData);
1216
1217 HRESULT hres = pThis->m_pSFParent->CompareIDs(pThis->m_sortInfo.ListColumn, pidl1, pidl2);
1219 return 0;
1220
1221 SHORT nDiff = HRESULT_CODE(hres);
1222 return nDiff * pThis->m_sortInfo.Direction;
1223}
1224
1226{
1227 HWND hHeader;
1228 HDITEM hColumn;
1229 int prevCol = m_sortInfo.ListColumn;
1231
1232 // FIXME: Is this correct? Who sets this style?
1233 // And if it is set, should it also block sorting using the menu?
1234 // Any why should it block sorting when the view is loaded initially?
1235 if (m_ListView.GetWindowLongPtr(GWL_STYLE) & LVS_NOSORTHEADER)
1236 return TRUE;
1237
1238 hHeader = ListView_GetHeader(m_ListView.m_hWnd);
1239 if (Col != -1)
1240 {
1241 if (Col >= Header_GetItemCount(hHeader))
1242 {
1243 ERR("Sort column out of range\n");
1244 return FALSE;
1245 }
1246
1247 if (prevCol == Col)
1248 m_sortInfo.Direction *= -1;
1249 else
1251 m_sortInfo.ListColumn = Col;
1252 }
1253 if (!m_sortInfo.Direction)
1254 m_sortInfo.Direction += 1;
1255
1256 /* If the sorting column changed, remove the sorting style from the old column */
1257 if (prevCol != -1 && prevCol != m_sortInfo.ListColumn)
1258 {
1259 hColumn.mask = HDI_FORMAT;
1260 Header_GetItem(hHeader, prevCol, &hColumn);
1261 hColumn.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN);
1262 Header_SetItem(hHeader, prevCol, &hColumn);
1263 }
1264
1265 /* Set the sorting style on the new column */
1266 hColumn.mask = HDI_FORMAT;
1267 Header_GetItem(hHeader, m_sortInfo.ListColumn, &hColumn);
1268 hColumn.fmt &= ~(HDF_SORTDOWN | HDF_SORTUP);
1269 hColumn.fmt |= (m_sortInfo.Direction > 0 ? HDF_SORTUP : HDF_SORTDOWN);
1270 Header_SetItem(hHeader, m_sortInfo.ListColumn, &hColumn);
1271
1272 /* Sort the list, using the current values of ListColumn and bIsAscending */
1275}
1276
1278{
1279 if (!m_ListView)
1280 return nullptr;
1281 return reinterpret_cast<PCUITEMID_CHILD>(m_ListView.GetItemData(i));
1282}
1283
1285{
1286 if (!m_ListView)
1287 return nullptr;
1288 return reinterpret_cast<PCUITEMID_CHILD>(lvItem.lParam);
1289}
1290
1292{
1294
1295 int cItems = m_ListView.GetItemCount();
1296
1297 for (int i = 0; i<cItems; i++)
1298 {
1299 PCUITEMID_CHILD currentpidl = _PidlByItem(i);
1300 if (ILIsEqual(pidl, currentpidl))
1301 return i;
1302 }
1303 return -1;
1304}
1305
1307{
1308 LVITEMW lvItem;
1309
1310 TRACE("(%p)(pidl=%p)\n", this, pidl);
1311
1313
1315 return -1;
1316
1317 lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; // set mask
1318 lvItem.iItem = m_ListView.GetItemCount(); // add item to lists end
1319 lvItem.iSubItem = 0;
1320 lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidl)); // set item's data
1321 lvItem.pszText = LPSTR_TEXTCALLBACKW; // get text on a callback basis
1322 lvItem.iImage = I_IMAGECALLBACK; // get image on a callback basis
1323 lvItem.stateMask = LVIS_CUT;
1324
1325 return m_ListView.InsertItem(&lvItem);
1326}
1327
1329{
1330 int nIndex;
1331
1332 TRACE("(%p)(pidl=%p)\n", this, pidl);
1333
1335
1336 nIndex = LV_FindItemByPidl(pidl);
1337 if (nIndex < 0)
1338 return FALSE;
1339
1341
1342 return m_ListView.DeleteItem(nIndex);
1343}
1344
1346{
1347 int nItem;
1348 LVITEMW lvItem;
1349
1350 TRACE("(%p)(pidlold=%p pidlnew=%p)\n", this, pidlOld, pidlNew);
1351
1353
1354 nItem = LV_FindItemByPidl(pidlOld);
1355
1356 if (-1 != nItem)
1357 {
1358 lvItem.mask = LVIF_PARAM; // only the pidl
1359 lvItem.iItem = nItem;
1360 lvItem.iSubItem = 0;
1361 m_ListView.GetItem(&lvItem);
1362
1363 // Store old pidl until new item is replaced
1364 LPVOID oldPidl = reinterpret_cast<LPVOID>(lvItem.lParam);
1365
1366 lvItem.mask = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT;
1367 lvItem.iItem = nItem;
1368 lvItem.iSubItem = 0;
1369 lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidlNew)); // set item's data
1372 m_ListView.SetItem(&lvItem);
1373 m_ListView.Update(nItem);
1374
1375 // Now that the new item is in place, we can safely release the old pidl
1376 SHFree(oldPidl);
1377
1378 return TRUE; // FIXME: better handling
1379 }
1380
1381 return FALSE;
1382}
1383
1385{
1386 int nItem;
1387 LVITEMW lvItem;
1388
1389 TRACE("(%p)(pidl=%p)\n", this, pidl);
1390
1392
1393 nItem = LV_FindItemByPidl(pidl);
1394
1395 if (-1 != nItem)
1396 {
1398
1399 lvItem.mask = LVIF_IMAGE;
1400 lvItem.iItem = nItem;
1401 lvItem.iSubItem = 0;
1403 m_ListView.SetItem(&lvItem);
1404 m_ListView.Update(nItem);
1405 return TRUE;
1406 }
1407
1408 return FALSE;
1409}
1410
1412{
1414
1415 LVITEMW lvItem = { LVIF_IMAGE };
1416 lvItem.iItem = iItem;
1417 lvItem.iImage = I_IMAGECALLBACK;
1418 m_ListView.SetItem(&lvItem);
1419 m_ListView.Update(iItem);
1420}
1421
1423{
1425
1426 for (INT iItem = -1;;)
1427 {
1428 iItem = ListView_GetNextItem(m_ListView, iItem, LVNI_ALL);
1429 if (iItem == -1)
1430 break;
1431
1432 LV_RefreshIcon(iItem);
1433 }
1434}
1435
1437{
1438 PITEMID_CHILD pidl = static_cast<PITEMID_CHILD>(ptr);
1439 CDefView *pThis = static_cast<CDefView *>(arg);
1440
1441 // in a commdlg this works as a filemask
1442 if (pThis->IncludeObject(pidl) == S_OK && pThis->m_ListView)
1443 pThis->LV_AddItem(pidl);
1444
1445 SHFree(pidl);
1446 return TRUE;
1447}
1448
1450// - gets the objectlist from the shellfolder
1451// - sorts the list
1452// - fills the list into the view
1454{
1455 CComPtr<IEnumIDList> pEnumIDList;
1456 PITEMID_CHILD pidl;
1457 DWORD dwFetched;
1458 HRESULT hRes;
1459 HDPA hdpa;
1460 DWORD dFlags = SHCONTF_NONFOLDERS | SHCONTF_FOLDERS;
1461
1462 TRACE("%p\n", this);
1463
1464 SHELLSTATE shellstate;
1466 if (shellstate.fShowAllObjects)
1467 {
1468 dFlags |= SHCONTF_INCLUDEHIDDEN;
1469 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1470 }
1471 if (shellstate.fShowSuperHidden)
1472 {
1473 dFlags |= SHCONTF_INCLUDESUPERHIDDEN;
1474 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1475 }
1476
1477 // get the itemlist from the shfolder
1478 hRes = m_pSFParent->EnumObjects(m_hWnd, dFlags, &pEnumIDList);
1479 if (hRes != S_OK)
1480 {
1481 if (hRes == S_FALSE)
1482 return(NOERROR);
1483 return(hRes);
1484 }
1485
1486 // create a pointer array
1487 hdpa = DPA_Create(16);
1488 if (!hdpa)
1489 return(E_OUTOFMEMORY);
1490
1491 // copy the items into the array
1492 while((S_OK == pEnumIDList->Next(1, &pidl, &dwFetched)) && dwFetched)
1493 {
1494 if (DPA_InsertPtr(hdpa, 0x7fff, pidl) == -1)
1495 {
1496 SHFree(pidl);
1497 }
1498 }
1499
1500 // turn listview's redrawing off
1502
1503 DPA_DestroyCallback( hdpa, fill_list, this);
1504
1505 /* sort the array */
1506 int sortCol = -1;
1507 if (!IsRefreshCommand && !m_sortInfo.bLoadedFromViewState) // Are we loading for the first time?
1508 {
1510 sortCol = 0; // In case the folder does not know/care
1511 if (m_pSF2Parent)
1512 {
1513 ULONG folderSortCol = sortCol, dummy;
1514 HRESULT hr = m_pSF2Parent->GetDefaultColumn(NULL, &folderSortCol, &dummy);
1515 if (SUCCEEDED(hr))
1516 hr = MapFolderColumnToListColumn(folderSortCol);
1517 if (SUCCEEDED(hr))
1518 sortCol = (int) hr;
1519 }
1520 }
1521 _Sort(sortCol);
1522
1524 {
1527 }
1528
1529 // load custom background image and custom text color
1532
1533 // turn listview's redrawing back on and force it to draw
1535
1537
1539 {
1540 // redraw now
1541 m_ListView.InvalidateRect(NULL, TRUE);
1542 }
1543
1545
1546 return S_OK;
1547}
1548
1550{
1551 if (m_ListView.IsWindow())
1552 m_ListView.UpdateWindow();
1553 bHandled = FALSE;
1554 return 0;
1555}
1556
1558{
1559 return m_ListView.SendMessageW(uMsg, 0, 0);
1560}
1561
1563{
1564 if (!m_Destroyed)
1565 {
1566 m_Destroyed = TRUE;
1567 if (m_hMenu)
1568 {
1570 m_hMenu = NULL;
1571 }
1574 m_hNotify = NULL;
1577 }
1578 bHandled = FALSE;
1579 return 0;
1580}
1581
1583{
1584 /* redirect to parent */
1587
1588 bHandled = FALSE;
1589 return 0;
1590}
1591
1592static VOID
1594{
1595 INT x0 = prc->left, y0 = prc->top, x1 = prc->right, y1 = prc->bottom;
1596 x0 += dx;
1597 y0 += dy;
1598
1599 HDC hMemDC = CreateCompatibleDC(hDC);
1600 HGDIOBJ hbmOld = SelectObject(hMemDC, hbm);
1601
1602 for (INT y = y0; y < y1; y += nHeight)
1603 {
1604 for (INT x = x0; x < x1; x += nWidth)
1605 {
1606 BitBlt(hDC, x, y, nWidth, nHeight, hMemDC, 0, 0, SRCCOPY);
1607 }
1608 }
1609
1610 SelectObject(hMemDC, hbmOld);
1611 DeleteDC(hMemDC);
1612}
1613
1615{
1616 HDC hDC = (HDC)wParam;
1617
1618 RECT rc;
1620
1622 {
1623 BITMAP bm;
1624 if (::GetObject(m_viewinfo_data.hbmBack, sizeof(BITMAP), &bm))
1625 {
1626 INT dx = -(::GetScrollPos(m_ListView, SB_HORZ) % bm.bmWidth);
1627 INT dy = -(::GetScrollPos(m_ListView, SB_VERT) % bm.bmHeight);
1628 DrawTileBitmap(hDC, &rc, m_viewinfo_data.hbmBack, bm.bmWidth, bm.bmHeight, dx, dy);
1629 }
1630 }
1631 else
1632 {
1634 }
1635
1636 bHandled = TRUE;
1637
1638 return TRUE;
1639}
1640
1642{
1643 /* Update desktop labels color */
1645
1646 /* Forward WM_SYSCOLORCHANGE to common controls */
1647 return m_ListView.SendMessageW(uMsg, 0, 0);
1648}
1649
1651{
1652 return reinterpret_cast<LRESULT>(m_pShellBrowser.p);
1653}
1654
1656{
1657 this->AddRef();
1658 bHandled = FALSE;
1659 return 0;
1660}
1661
1663{
1664 this->Release();
1665}
1666
1668{
1671
1672 TRACE("%p\n", this);
1673
1675 {
1676 if (FAILED(RegisterDragDrop(m_hWnd, pdt)))
1677 ERR("Error Registering DragDrop\n");
1678 }
1679
1680 /* register for receiving notifications */
1681 m_pSFParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
1682 if (ppf2)
1683 {
1684 ppf2->GetCurFolder(&m_pidlParent);
1685 }
1686
1687 if (CreateList())
1688 {
1689 if (InitList())
1690 {
1691 FillList(FALSE);
1692 }
1693 }
1694
1696 {
1697 HWND hwndSB;
1698 m_pShellBrowser->GetWindow(&hwndSB);
1700 }
1701
1702 // Set up change notification
1703 LPITEMIDLIST pidlTarget = NULL;
1704 LONG fEvents = 0;
1705 HRESULT hr = _DoFolderViewCB(SFVM_GETNOTIFY, (WPARAM)&pidlTarget, (LPARAM)&fEvents);
1706 if (FAILED(hr) || (!pidlTarget && !fEvents))
1707 {
1708 pidlTarget = m_pidlParent;
1709 fEvents = SHCNE_ALLEVENTS;
1710 }
1711 SHChangeNotifyEntry ntreg = {};
1713 if (FAILED(hr))
1714 {
1715 ntreg.fRecursive = FALSE;
1716 ntreg.pidl = pidlTarget;
1717 }
1721 fEvents, SHV_CHANGE_NOTIFY,
1722 1, &ntreg);
1723
1725
1726 BOOL bPreviousParentSpecial = m_isParentFolderSpecial;
1727
1728 // A folder is special if it is the Desktop folder,
1729 // a network folder, or a Control Panel folder
1732
1733 // Only force StatusBar part refresh if the state
1734 // changed from the previous folder
1735 if (bPreviousParentSpecial != m_isParentFolderSpecial)
1736 {
1737 // This handles changing StatusBar parts
1739 }
1740
1742
1743 return S_OK;
1744}
1745
1746// #### Handling of the menus ####
1747
1748extern "C" DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID);
1749
1751{
1753 if (!hFileMenu)
1754 return E_FAIL;
1755
1756 /* Cleanup the items added previously */
1757 for (int i = GetMenuItemCount(hFileMenu) - 1; i >= 0; i--)
1758 {
1759 UINT id = GetMenuItemID(hFileMenu, i);
1760 if (id < FCIDM_BROWSERFIRST || id > FCIDM_BROWSERLAST)
1761 DeleteMenu(hFileMenu, i, MF_BYPOSITION);
1762 }
1763
1764 // In case we still have this left over, clean it up
1765 if (m_pFileMenu)
1766 {
1769 }
1770 UINT selcount = m_ListView.GetSelectedCount();
1771 // Store context menu in m_pFileMenu and keep it to invoke the selected command later on
1774 return hr;
1775
1777
1778 UINT cmf = GetContextMenuFlags(m_pShellBrowser, SFGAO_CANRENAME);
1779 hr = m_pFileMenu->QueryContextMenu(hmenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
1781 return hr;
1782
1783 // TODO: filter or something
1784
1785 Shell_MergeMenus(hFileMenu, hmenu, 0, 0, 0xFFFF, MM_ADDSEPARATOR | MM_SUBMENUSHAVEIDS);
1786
1788
1789 return S_OK;
1790}
1791
1793{
1795 if (!hEditMenu)
1796 return E_FAIL;
1797
1798 HMENU hmenuContents = ::LoadMenuW(shell32_hInstance, L"MENU_003");
1799 if (!hmenuContents)
1800 return E_FAIL;
1801
1802 Shell_MergeMenus(hEditMenu, hmenuContents, 0, 0, 0xFFFF, 0);
1803
1804 ::DestroyMenu(hmenuContents);
1805
1806 return S_OK;
1807}
1808
1810{
1812 if (!hViewMenu)
1813 return E_FAIL;
1814
1816 if (!m_hMenuViewModes)
1817 return E_FAIL;
1818
1821
1822 return S_OK;
1823}
1824
1826{
1827 bool forceMerge = false;
1829
1830 // Make sure the column we currently sort by is in the menu
1833 {
1837 LVCOLUMN lvc;
1838 lvc.mask = LVCF_TEXT;
1839 lvc.pszText = buf;
1840 lvc.cchTextMax = _countof(buf);
1841 currentSortId = DVIDM_ARRANGESORT_LAST;
1842 forceMerge = true;
1844 AppendMenuItem(m_hMenuArrangeModes, MF_STRING, currentSortId, lvc.pszText, m_sortInfo.ListColumn);
1845 }
1846
1847 // Prepend the sort-by items unless they are aleady there
1848 if (GetMenuItemID(hmenuArrange, 0) == FCIDM_SHVIEW_AUTOARRANGE || forceMerge)
1849 {
1850 Shell_MergeMenus(hmenuArrange, m_hMenuArrangeModes, 0, 0, 0xFFFF, MM_ADDSEPARATOR);
1851 }
1852
1853 CheckMenuRadioItem(hmenuArrange,
1855 currentSortId, MF_BYCOMMAND);
1856
1858 {
1861 }
1862 else
1863 {
1866
1867 if (GetAutoArrange() == S_OK)
1869 else
1871
1872 if (_GetSnapToGrid() == S_OK)
1874 else
1876 }
1877
1878 return S_OK;
1879}
1880
1882{
1884 {
1885 UINT iItemFirst = FCIDM_SHVIEW_BIGICON;
1886 UINT iItemLast = iItemFirst + FVM_LAST - FVM_FIRST;
1887 UINT iItem = iItemFirst + m_FolderSettings.ViewMode - FVM_FIRST;
1888 CheckMenuRadioItem(hmenuView, iItemFirst, iItemLast, iItem, MF_BYCOMMAND);
1889 }
1890
1891 return S_OK;
1892}
1893
1895{
1896 const UINT maxItems = 15; // Feels about right
1897 const UINT idMore = 0x1337;
1898 UINT idFirst = idMore + 1, idLast = idFirst;
1899 UINT lastValidListCol = 0; // Keep track of where the new column should be inserted
1900 UINT showMore = GetKeyState(VK_SHIFT) < 0;
1902 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
1903
1904 if (lParam == ~0)
1905 {
1906 RECT r;
1907 ::GetWindowRect(hWndHdr, &r);
1908 pt.x = r.left + ((r.right - r.left) / 2);
1909 pt.y = r.top + ((r.bottom - r.top) / 2);
1910 }
1911
1912 HMENU hMenu = CreatePopupMenu();
1913 if (!hMenu)
1914 return 0;
1915
1916 for (UINT foldCol = 0;; ++foldCol)
1917 {
1920 sd.str.uType = !STRRET_WSTR;
1921 if (FAILED(GetDetailsByFolderColumn(NULL, foldCol, sd)))
1922 break;
1923 if (FAILED(StrRetToStrNW(buf, _countof(buf), &sd.str, NULL)))
1924 break;
1925
1926 SHCOLSTATEF state = 0;
1927 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
1928 state = 0;
1929 showMore |= (state & (SHCOLSTATE_SECONDARYUI));
1930
1931 UINT mf = MF_STRING;
1932 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
1933
1934 if (foldCol == 0)
1935 mf |= MF_CHECKED | MF_GRAYED | MF_DISABLED; // Force column 0
1937 continue;
1938 else if (SUCCEEDED(listCol))
1939 mf |= MF_CHECKED;
1940
1941 if (AppendMenuItem(hMenu, mf, idLast, buf, lastValidListCol + 1))
1942 {
1943 idLast++;
1944 if (SUCCEEDED(listCol))
1945 lastValidListCol = listCol;
1946 }
1947
1948 if (idLast - idFirst == maxItems)
1949 {
1950 showMore++;
1951 break;
1952 }
1953 }
1954
1955 if (showMore)
1956 {
1957#if 0 // TODO
1958 InsertMenuW(hMenu, -1, MF_SEPARATOR, 0, NULL);
1959 InsertMenuW(hMenu, -1, MF_STRING, idMore, L"More...");
1960#endif
1961 }
1962
1963 // A cludge to force the cursor to update so we are not stuck with "size left/right" if
1964 // the right-click was on a column divider.
1966
1967 // Note: Uses the header as the owner so CDefView::OnInitMenuPopup does not mess us up.
1969 pt.x, pt.y, 0, hWndHdr, NULL);
1970 if (idCmd == idMore)
1971 {
1972 FIXME("Open More dialog\n");
1973 }
1974 else if (idCmd)
1975 {
1976 UINT foldCol = idCmd - idFirst;
1977 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
1978 if (SUCCEEDED(listCol))
1979 {
1980 ListView_DeleteColumn(m_ListView.m_hWnd, listCol);
1981 }
1982 else
1983 {
1984 listCol = (UINT) GetMenuItemDataById(hMenu, idCmd);
1985 LoadColumn(foldCol, listCol, TRUE);
1986 }
1988 }
1989 DestroyMenu(hMenu);
1990 return 0;
1991}
1992
1993/**********************************************************
1994* ShellView_GetSelections()
1995*
1996* - fills the m_apidl list with the selected objects
1997*
1998* RETURNS
1999* number of selected items
2000*/
2002{
2004 if (count > m_cidl || !count || !m_apidl) // !count to free possibly large cache, !m_apidl to make sure m_apidl is a valid pointer
2005 {
2006 SHFree(m_apidl);
2007 m_apidl = static_cast<PCUITEMID_CHILD*>(SHAlloc(count * sizeof(PCUITEMID_CHILD)));
2008 if (!m_apidl)
2009 {
2010 m_cidl = 0;
2011 return 0;
2012 }
2013 }
2014 m_cidl = count;
2015
2016 TRACE("-- Items selected =%u\n", m_cidl);
2017
2019
2020 UINT i = 0;
2021 int lvIndex = -1;
2022 while ((lvIndex = m_ListView.GetNextItem(lvIndex, LVNI_SELECTED)) > -1)
2023 {
2024 m_apidl[i] = _PidlByItem(lvIndex);
2025 i++;
2026 if (i == m_cidl)
2027 break;
2028 TRACE("-- selected Item found\n");
2029 }
2030
2031 return m_cidl;
2032}
2033
2035{
2036 CMINVOKECOMMANDINFOEX cmi;
2037
2038 ZeroMemory(&cmi, sizeof(cmi));
2039 cmi.cbSize = sizeof(cmi);
2040 cmi.hwnd = m_hWnd;
2041 cmi.lpVerb = lpVerb;
2042 cmi.nShow = SW_SHOW;
2043
2044 if (GetKeyState(VK_SHIFT) < 0)
2045 cmi.fMask |= CMIC_MASK_SHIFT_DOWN;
2046
2048 cmi.fMask |= CMIC_MASK_CONTROL_DOWN;
2049
2050 if (pt)
2051 {
2052 cmi.fMask |= CMIC_MASK_PTINVOKE;
2053 cmi.ptInvoke = *pt;
2054 }
2055
2056 WCHAR szDirW[MAX_PATH] = L"";
2057 CHAR szDirA[MAX_PATH];
2059 *szDirW != UNICODE_NULL)
2060 {
2061 SHUnicodeToAnsi(szDirW, szDirA, _countof(szDirA));
2062 cmi.fMask |= CMIC_MASK_UNICODE;
2063 cmi.lpDirectory = szDirA;
2064 cmi.lpDirectoryW = szDirW;
2065 }
2066
2067 HRESULT hr = pCM->InvokeCommand((LPCMINVOKECOMMANDINFO)&cmi);
2068 // Most of our callers will do this, but if they would forget (File menu!)
2069 IUnknown_SetSite(pCM, NULL);
2070 pCM.Release();
2071
2073 return hr;
2074
2075 return S_OK;
2076}
2077
2079{
2080 HMENU hMenu;
2081 UINT uCommand;
2082 HRESULT hResult;
2083
2084 if (m_ListView.GetSelectedCount() == 0)
2085 return S_OK;
2086
2087 hResult = OnDefaultCommand();
2088 if (hResult == S_OK)
2089 return hResult;
2090
2091 hMenu = CreatePopupMenu();
2092 if (!hMenu)
2093 return E_FAIL;
2094
2097 MenuCleanup _(pCM, hMenu);
2098 if (FAILED_UNEXPECTEDLY(hResult))
2099 return hResult;
2100
2101 UINT cmf = CMF_DEFAULTONLY | GetContextMenuFlags(m_pShellBrowser, 0);
2102 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
2103 if (FAILED_UNEXPECTEDLY(hResult))
2104 return hResult;
2105
2106 uCommand = GetMenuDefaultItem(hMenu, FALSE, 0);
2107 if (uCommand == (UINT)-1)
2108 {
2109 ERR("GetMenuDefaultItem returned -1\n");
2110 return E_FAIL;
2111 }
2112
2114
2115 return hResult;
2116}
2117
2119{
2121 UINT uCommand;
2122 HRESULT hResult;
2123
2124 TRACE("(%p)\n", this);
2125
2126 if (m_hContextMenu != NULL)
2127 {
2128 ERR("HACK: Aborting context menu in nested call\n");
2129 return 0;
2130 }
2131
2132 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
2133 RECT r;
2134 if (::GetWindowRect(hWndHdr, &r) && PtInRect(&r, pt) && ::IsWindowVisible(hWndHdr))
2135 {
2137 }
2138
2140 if (!m_hContextMenu)
2141 return E_FAIL;
2142
2143 if (lParam != ~0) // unless app key (menu key) was pressed
2144 {
2145 LV_HITTESTINFO hittest = { pt };
2146 ScreenToClient(&hittest.pt);
2147 m_ListView.HitTest(&hittest);
2148
2149 // Right-Clicked item is selected? If selected, no selection change.
2150 // If not selected, then reset the selection and select the item.
2151 if ((hittest.flags & LVHT_ONITEM) &&
2153 {
2154 SelectItem(hittest.iItem, SVSI_SELECT | SVSI_DESELECTOTHERS | SVSI_ENSUREVISIBLE);
2155 }
2156 }
2157
2159 // In case we still have this left over, clean it up
2162 if (FAILED_UNEXPECTEDLY(hResult))
2163 return 0;
2164
2165 UINT cmf = GetContextMenuFlags(m_pShellBrowser, SFGAO_CANRENAME);
2166 // Use 1 as the first id we want. 0 means that user canceled the menu
2167 hResult = m_pCM->QueryContextMenu(m_hContextMenu, 0, CONTEXT_MENU_BASE_ID, DVIDM_CONTEXTMENU_LAST, cmf);
2168 if (FAILED_UNEXPECTEDLY(hResult))
2169 return 0;
2170
2171 // There is no position requested, so try to find one
2172 if (lParam == ~0)
2173 {
2174 HWND hFocus = ::GetFocus();
2175 int lvIndex = -1;
2176
2177 if (hFocus == m_ListView.m_hWnd || m_ListView.IsChild(hFocus))
2178 {
2179 // Is there an item focused and selected?
2181 // If not, find the first selected item
2182 if (lvIndex < 0)
2183 lvIndex = m_ListView.GetNextItem(-1, LVIS_SELECTED);
2184 }
2185
2186 // We got something
2187 if (lvIndex > -1)
2188 {
2189 // Find the center of the icon
2190 RECT rc = { LVIR_ICON };
2191 m_ListView.SendMessage(LVM_GETITEMRECT, lvIndex, (LPARAM)&rc);
2192 pt.x = (rc.right + rc.left) / 2;
2193 pt.y = (rc.bottom + rc.top) / 2;
2194 }
2195 else
2196 {
2197 // We have to drop it somewhere
2198 pt.x = pt.y = 0;
2199 }
2200
2201 m_ListView.ClientToScreen(&pt);
2202 }
2203
2204 // This runs the message loop, calling back to us with f.e. WM_INITPOPUP (hence why m_hContextMenu and m_pCM exist)
2205 uCommand = TrackPopupMenu(m_hContextMenu,
2207 pt.x, pt.y, 0, m_hWnd, NULL);
2208 if (uCommand == 0)
2209 return 0;
2210
2211 if (uCommand >= DVIDM_ARRANGESORT_FIRST && uCommand <= DVIDM_ARRANGESORT_LAST)
2212 return SendMessage(WM_COMMAND, uCommand, 0);
2213
2214 if (uCommand == FCIDM_SHVIEW_OPEN && OnDefaultCommand() == S_OK)
2215 return 0;
2216
2218
2219 return 0;
2220}
2221
2223{
2224 HRESULT hResult;
2225 HMENU hMenu = NULL;
2226
2228 hResult = GetItemObject(bUseSelection ? SVGIO_SELECTION : SVGIO_BACKGROUND, IID_PPV_ARG(IContextMenu, &pCM));
2229 if (FAILED_UNEXPECTEDLY(hResult))
2230 return 0;
2231
2232 MenuCleanup _(pCM, hMenu);
2233
2234 if ((uCommand != FCIDM_SHVIEW_DELETE) && (uCommand != FCIDM_SHVIEW_RENAME))
2235 {
2236 hMenu = CreatePopupMenu();
2237 if (!hMenu)
2238 return 0;
2239
2240 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, CMF_NORMAL);
2241 if (FAILED_UNEXPECTEDLY(hResult))
2242 return 0;
2243 }
2244
2245 if (bUseSelection)
2246 {
2247 // FIXME: we should cache this
2248 SFGAOF rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER;
2249 hResult = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2250 if (FAILED_UNEXPECTEDLY(hResult))
2251 return 0;
2252
2253 if (!(rfg & SFGAO_CANMOVE) && uCommand == FCIDM_SHVIEW_CUT)
2254 return 0;
2255 if (!(rfg & SFGAO_CANCOPY) && uCommand == FCIDM_SHVIEW_COPY)
2256 return 0;
2257 if (!(rfg & SFGAO_CANDELETE) && uCommand == FCIDM_SHVIEW_DELETE)
2258 return 0;
2259 if (!(rfg & SFGAO_CANRENAME) && uCommand == FCIDM_SHVIEW_RENAME)
2260 return 0;
2261 if (!(rfg & SFGAO_HASPROPSHEET) && uCommand == FCIDM_SHVIEW_PROPERTIES)
2262 return 0;
2263 }
2264
2265 // FIXME: We should probably use the objects position?
2267 return 0;
2268}
2269
2270// ##### message handling #####
2271
2273{
2274 WORD wWidth, wHeight;
2275
2276 wWidth = LOWORD(lParam);
2277 wHeight = HIWORD(lParam);
2278
2279 TRACE("%p width=%u height=%u\n", this, wWidth, wHeight);
2280
2281 // WM_SIZE can come before WM_CREATE
2282 if (!m_ListView)
2283 return 0;
2284
2285 /* Resize the ListView to fit our window */
2286 ::MoveWindow(m_ListView, 0, 0, wWidth, wHeight, TRUE);
2287
2289
2292
2293 return 0;
2294}
2295
2296// internal
2298{
2299 TRACE("%p\n", this);
2300
2302 {
2303 // TODO: cleanup menu after deactivation
2305 }
2306}
2307
2309{
2310 TRACE("%p uState=%x\n", this, uState);
2311
2312 // don't do anything if the state isn't really changing
2313 if (m_uState == uState)
2314 {
2315 return;
2316 }
2317
2318 if (uState == SVUIA_DEACTIVATE)
2319 {
2320 OnDeactivate();
2321 }
2322 else
2323 {
2325 {
2326 FillEditMenu();
2327 FillViewMenu();
2328 m_pShellBrowser->SetMenuSB(m_hMenu, 0, m_hWnd);
2330 }
2331
2332 if (SVUIA_ACTIVATE_FOCUS == uState)
2333 {
2334 m_ListView.SetFocus();
2335 }
2336 }
2337
2338 m_uState = uState;
2339 TRACE("--\n");
2340}
2341
2343{
2344 if (!GetSelections())
2345 return;
2346
2347 SFGAOF rfg = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_FILESYSTEM;
2348 HRESULT hr = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2350 return;
2351
2352 if (!bCopy && !(rfg & SFGAO_CANMOVE))
2353 return;
2354 if (bCopy && !(rfg & SFGAO_CANCOPY))
2355 return;
2356
2358 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_IContextMenu, 0, (void **)&pCM);
2360 return;
2361
2362 InvokeContextMenuCommand(pCM, (bCopy ? "copyto" : "moveto"), NULL);
2363}
2364
2366{
2368 return 0;
2369}
2370
2372{
2373 TRACE("%p\n", this);
2374
2375 /* Tell the browser one of our windows has received the focus. This
2376 should always be done before merging menus (OnActivate merges the
2377 menus) if one of our windows has the focus.*/
2378
2379 m_pShellBrowser->OnViewWindowActive(this);
2381
2382 /* Set the focus to the listview */
2383 m_ListView.SetFocus();
2384
2385 /* Notify the ICommDlgBrowser interface */
2386 OnStateChange(CDBOSC_SETFOCUS);
2387
2388 return 0;
2389}
2390
2392{
2393 TRACE("(%p) stub\n", this);
2394
2396 /* Notify the ICommDlgBrowser */
2397 OnStateChange(CDBOSC_KILLFOCUS);
2398
2399 return 0;
2400}
2401
2402// the CmdID's are the ones from the context menu
2404{
2405 DWORD dwCmdID;
2406 DWORD dwCmd;
2407 HWND hwndCmd;
2408 int nCount;
2409
2410 dwCmdID = GET_WM_COMMAND_ID(wParam, lParam);
2412 hwndCmd = GET_WM_COMMAND_HWND(wParam, lParam);
2413
2414 TRACE("(%p)->(0x%08x 0x%08x %p) stub\n", this, dwCmdID, dwCmd, hwndCmd);
2415
2416 if (dwCmdID >= DVIDM_ARRANGESORT_FIRST && dwCmdID <= DVIDM_ARRANGESORT_LAST)
2417 {
2418 UINT listCol = (UINT)GetMenuItemDataById(m_hMenuArrangeModes, dwCmdID);
2419 _Sort(listCol);
2420 return 0;
2421 }
2422
2423 switch (dwCmdID)
2424 {
2428 CheckToolbar();
2429 break;
2432 m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
2433 CheckToolbar();
2434 break;
2437 m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
2438 CheckToolbar();
2439 break;
2442 m_ListView.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
2443 CheckToolbar();
2444 break;
2447 break;
2449 if (_GetSnapToGrid() == S_OK)
2451 else
2452 ArrangeGrid();
2453 break;
2455 if (GetAutoArrange() == S_OK)
2456 m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
2457 else
2458 AutoArrange();
2459 break;
2463 break;
2465 nCount = m_ListView.GetItemCount();
2466 for (int i=0; i < nCount; i++)
2468 break;
2470 Refresh();
2471 break;
2473 case FCIDM_SHVIEW_CUT:
2474 case FCIDM_SHVIEW_COPY:
2478 return 0;
2479 return OnExplorerCommand(dwCmdID, TRUE);
2483 return 0;
2485 case FCIDM_SHVIEW_UNDO:
2488 return OnExplorerCommand(dwCmdID, FALSE);
2489 default:
2490 // WM_COMMAND messages from file menu are routed to CDefView to let m_pFileMenu handle them
2491 if (m_pFileMenu && dwCmd == 0)
2492 {
2493 HMENU Dummy = NULL;
2494 MenuCleanup _(m_pFileMenu, Dummy);
2496 }
2497 }
2498
2499 return 0;
2500}
2501
2502static BOOL
2504{
2505 HKEY hKey;
2506 LONG error;
2507 DWORD dwValue = FALSE, cbValue;
2508
2510 if (error)
2511 return dwValue;
2512
2513 cbValue = sizeof(dwValue);
2514 RegQueryValueExW(hKey, L"SelectExtOnRename", NULL, NULL, (LPBYTE)&dwValue, &cbValue);
2515
2517 return !!dwValue;
2518}
2519
2521{
2522 UINT CtlID;
2523 LPNMHDR lpnmh;
2524 LPNMLISTVIEW lpnmlv;
2525 NMLVDISPINFOW *lpdi;
2526 PCUITEMID_CHILD pidl;
2527 BOOL unused;
2528
2529 CtlID = wParam;
2530 lpnmh = (LPNMHDR)lParam;
2531 lpnmlv = (LPNMLISTVIEW)lpnmh;
2532 lpdi = (NMLVDISPINFOW *)lpnmh;
2533
2534 TRACE("%p CtlID=%u lpnmh->code=%x\n", this, CtlID, lpnmh->code);
2535
2536 switch (lpnmh->code)
2537 {
2538 case NM_SETFOCUS:
2539 TRACE("-- NM_SETFOCUS %p\n", this);
2540 OnSetFocus(0, 0, 0, unused);
2541 break;
2542 case NM_KILLFOCUS:
2543 TRACE("-- NM_KILLFOCUS %p\n", this);
2544 OnDeactivate();
2545 /* Notify the ICommDlgBrowser interface */
2546 OnStateChange(CDBOSC_KILLFOCUS);
2547 break;
2548 case NM_CUSTOMDRAW:
2549 TRACE("-- NM_CUSTOMDRAW %p\n", this);
2550 return CDRF_DODEFAULT;
2551 case NM_RELEASEDCAPTURE:
2552 TRACE("-- NM_RELEASEDCAPTURE %p\n", this);
2553 break;
2554 case NM_CLICK:
2555 TRACE("-- NM_CLICK %p\n", this);
2556 break;
2557 case NM_RCLICK:
2558 TRACE("-- NM_RCLICK %p\n", this);
2559 break;
2560 case NM_DBLCLK:
2561 TRACE("-- NM_DBLCLK %p\n", this);
2563 break;
2564 case NM_RETURN:
2565 TRACE("-- NM_RETURN %p\n", this);
2567 break;
2568 case HDN_ENDTRACKW:
2569 TRACE("-- HDN_ENDTRACKW %p\n", this);
2570 //nColumn1 = m_ListView.GetColumnWidth(0);
2571 //nColumn2 = m_ListView.GetColumnWidth(1);
2572 break;
2573 case LVN_DELETEITEM:
2574 TRACE("-- LVN_DELETEITEM %p\n", this);
2575 /*delete the pidl because we made a copy of it*/
2576 SHFree(reinterpret_cast<LPVOID>(lpnmlv->lParam));
2577 break;
2578 case LVN_DELETEALLITEMS:
2579 TRACE("-- LVN_DELETEALLITEMS %p\n", this);
2580 return FALSE;
2581 case LVN_INSERTITEM:
2582 TRACE("-- LVN_INSERTITEM (STUB)%p\n", this);
2583 break;
2584 case LVN_ITEMACTIVATE:
2585 TRACE("-- LVN_ITEMACTIVATE %p\n", this);
2586 OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject
2587 break;
2588 case LVN_COLUMNCLICK:
2589 {
2590 UINT foldercol = MapListColumnToFolderColumn(lpnmlv->iSubItem);
2591 HRESULT hr = S_FALSE;
2592 if (m_pSDParent)
2593 hr = m_pSDParent->ColumnClick(foldercol);
2594 if (hr != S_OK)
2595 hr = _DoFolderViewCB(SFVM_COLUMNCLICK, foldercol, 0);
2596 if (hr != S_OK)
2597 _Sort(lpnmlv->iSubItem);
2598 break;
2599 }
2600 case LVN_GETDISPINFOA:
2601 case LVN_GETDISPINFOW:
2602 TRACE("-- LVN_GETDISPINFO %p\n", this);
2603 pidl = _PidlByItem(lpdi->item);
2604
2605 if (lpdi->item.mask & LVIF_TEXT) /* text requested */
2606 {
2609 break;
2610
2611 if (lpnmh->code == LVN_GETDISPINFOA)
2612 {
2613 /* shouldn't happen */
2614 NMLVDISPINFOA *lpdiA = (NMLVDISPINFOA *)lpnmh;
2615 StrRetToStrNA( lpdiA->item.pszText, lpdiA->item.cchTextMax, &sd.str, NULL);
2616 TRACE("-- text=%s\n", lpdiA->item.pszText);
2617 }
2618 else /* LVN_GETDISPINFOW */
2619 {
2620 StrRetToStrNW( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL);
2621 TRACE("-- text=%s\n", debugstr_w(lpdi->item.pszText));
2622 }
2623 }
2624 if(lpdi->item.mask & LVIF_IMAGE) /* image requested */
2625 {
2627 }
2628 if(lpdi->item.mask & LVIF_STATE)
2629 {
2630 ULONG attributes = SFGAO_HIDDEN;
2631 if (SUCCEEDED(m_pSFParent->GetAttributesOf(1, &pidl, &attributes)))
2632 {
2633 if (attributes & SFGAO_HIDDEN)
2634 lpdi->item.state |= LVIS_CUT;
2635 }
2636 }
2637 lpdi->item.mask |= LVIF_DI_SETITEM;
2638 break;
2639 case LVN_ITEMCHANGED:
2640 TRACE("-- LVN_ITEMCHANGED %p\n", this);
2641 if ((lpnmlv->uOldState ^ lpnmlv->uNewState) & (LVIS_SELECTED | LVIS_FOCUSED))
2642 {
2643 OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject
2644 // FIXME: Use LVIS_DROPHILITED instead in drag_notify_subitem
2646 {
2649 }
2650 _DoFolderViewCB(SFVM_SELECTIONCHANGED, NULL/* FIXME */, NULL/* FIXME */);
2651 }
2652 break;
2653 case LVN_BEGINDRAG:
2654 case LVN_BEGINRDRAG:
2655 TRACE("-- LVN_BEGINDRAG\n");
2656 if (GetSelections())
2657 {
2659 DWORD dwAttributes = SFGAO_CANCOPY | SFGAO_CANLINK;
2660 DWORD dwEffect = DROPEFFECT_MOVE;
2661
2662 if (SUCCEEDED(m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_NULL_PPV_ARG(IDataObject, &pda))))
2663 {
2665
2666 if (SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &dwAttributes)))
2667 dwEffect |= dwAttributes & (SFGAO_CANCOPY | SFGAO_CANLINK);
2668
2670 if (SUCCEEDED(pda->QueryInterface(IID_PPV_ARG(IAsyncOperation, &piaso))))
2671 piaso->SetAsyncMode(TRUE);
2672
2673 DWORD dwEffect2;
2674
2675 m_pSourceDataObject = pda;
2676 m_ptFirstMousePos = params->ptAction;
2679
2680 HIMAGELIST big_icons, small_icons;
2681 Shell_GetImageLists(&big_icons, &small_icons);
2682 PCUITEMID_CHILD pidl = _PidlByItem(params->iItem);
2683 int iIcon = SHMapPIDLToSystemImageListIndex(m_pSFParent, pidl, 0);
2684 POINT ptItem;
2685 m_ListView.GetItemPosition(params->iItem, &ptItem);
2686
2687 ImageList_BeginDrag(big_icons, iIcon, params->ptAction.x - ptItem.x, params->ptAction.y - ptItem.y);
2688 DoDragDrop(pda, this, dwEffect, &dwEffect2);
2690 }
2691 }
2692 break;
2694 {
2695 DWORD dwAttr = SFGAO_CANRENAME;
2696 pidl = _PidlByItem(lpdi->item);
2697
2698 TRACE("-- LVN_BEGINLABELEDITW %p\n", this);
2699
2700 m_pSFParent->GetAttributesOf(1, &pidl, &dwAttr);
2701 if (SFGAO_CANRENAME & dwAttr)
2702 {
2703 HWND hEdit = reinterpret_cast<HWND>(m_ListView.SendMessage(LVM_GETEDITCONTROL));
2705
2706 // smartass-renaming: See CORE-15242
2707 if (!(dwAttr & SFGAO_FOLDER) && (dwAttr & SFGAO_FILESYSTEM) &&
2708 (lpdi->item.mask & LVIF_TEXT) && !SelectExtOnRename())
2709 {
2710 WCHAR szFullPath[MAX_PATH];
2711 PIDLIST_ABSOLUTE pidlFull = ILCombine(m_pidlParent, pidl);
2712 SHGetPathFromIDListW(pidlFull, szFullPath);
2713
2714 INT cchLimit = 0;
2715 _DoFolderViewCB(SFVM_GETNAMELENGTH, (WPARAM)pidlFull, (LPARAM)&cchLimit);
2716 if (cchLimit)
2717 ::SendMessageW(hEdit, EM_SETLIMITTEXT, cchLimit, 0);
2718
2719 if (!SHELL_FS_HideExtension(szFullPath))
2720 {
2721 LPWSTR pszText = lpdi->item.pszText;
2722 LPWSTR pchDotExt = PathFindExtensionW(pszText);
2723 ::PostMessageW(hEdit, EM_SETSEL, 0, pchDotExt - pszText);
2725 }
2726
2727 ILFree(pidlFull);
2728 }
2729
2730 m_isEditing = TRUE;
2731 return FALSE;
2732 }
2733 return TRUE;
2734 }
2735 case LVN_ENDLABELEDITW:
2736 {
2737 TRACE("-- LVN_ENDLABELEDITW %p\n", this);
2739
2740 if (lpdi->item.pszText)
2741 {
2742 HRESULT hr;
2743 LVITEMW lvItem;
2744
2745 pidl = _PidlByItem(lpdi->item);
2746 PITEMID_CHILD pidlNew = NULL;
2747 hr = m_pSFParent->SetNameOf(0, pidl, lpdi->item.pszText, SHGDN_INFOLDER, &pidlNew);
2748
2749 if (SUCCEEDED(hr) && pidlNew)
2750 {
2751 lvItem.mask = LVIF_PARAM|LVIF_IMAGE;
2752 lvItem.iItem = lpdi->item.iItem;
2753 lvItem.iSubItem = 0;
2754 lvItem.lParam = reinterpret_cast<LPARAM>(pidlNew);
2756 m_ListView.SetItem(&lvItem);
2757 m_ListView.Update(lpdi->item.iItem);
2758 return TRUE;
2759 }
2760 }
2761
2762 return FALSE;
2763 }
2764 default:
2765 TRACE("-- %p WM_COMMAND %x unhandled\n", this, lpnmh->code);
2766 break;
2767 }
2768
2769 return 0;
2770}
2771
2772// This is just a quick hack to make the desktop work correctly.
2773// ITranslateShellChangeNotify's IsChildID is undocumented, but most likely the
2774// way that a folder should know if it should update upon a change notification.
2775// It is exported by merged folders at a minimum.
2777{
2778 if (!pidl1 || !pidl2)
2779 return FALSE;
2780 if (ILIsParent(pidl1, pidl2, TRUE))
2781 return TRUE;
2782
2783 CComHeapPtr<ITEMIDLIST_ABSOLUTE> pidl2Clone(ILClone(pidl2));
2784 ILRemoveLastID(pidl2Clone);
2785 return ILIsEqual(pidl1, pidl2Clone);
2786}
2787
2789{
2790 // The change notify can come before WM_CREATE
2791 if (!m_ListView)
2792 return FALSE;
2793
2794 HANDLE hChange = (HANDLE)wParam;
2795 DWORD dwProcID = (DWORD)lParam;
2796 PIDLIST_ABSOLUTE *Pidls;
2797 LONG lEvent;
2798 HANDLE hLock = SHChangeNotification_Lock(hChange, dwProcID, &Pidls, &lEvent);
2799 if (hLock == NULL)
2800 {
2801 ERR("hLock == NULL\n");
2802 return FALSE;
2803 }
2804
2805 TRACE("(%p)(%p,%p,%p)\n", this, Pidls[0], Pidls[1], lParam);
2806
2808 return FALSE;
2809
2810 // Translate child IDLs.
2811 // SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes)
2812 HRESULT hr;
2813 PITEMID_CHILD child0 = NULL, child1 = NULL;
2814 CComHeapPtr<ITEMIDLIST_RELATIVE> pidl0Temp, pidl1Temp;
2815 if (_ILIsSpecialFolder(Pidls[0]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[0]))
2816 {
2817 child0 = ILFindLastID(Pidls[0]);
2818 hr = SHGetRealIDL(m_pSFParent, child0, &pidl0Temp);
2819 if (SUCCEEDED(hr))
2820 child0 = pidl0Temp;
2821 }
2822 if (_ILIsSpecialFolder(Pidls[1]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[1]))
2823 {
2824 child1 = ILFindLastID(Pidls[1]);
2825 hr = SHGetRealIDL(m_pSFParent, child1, &pidl1Temp);
2826 if (SUCCEEDED(hr))
2827 child1 = pidl1Temp;
2828 }
2829
2830 lEvent &= ~SHCNE_INTERRUPT;
2831 switch (lEvent)
2832 {
2833 case SHCNE_MKDIR:
2834 case SHCNE_CREATE:
2835 case SHCNE_DRIVEADD:
2836 if (!child0)
2837 break;
2838 if (LV_FindItemByPidl(child0) < 0)
2839 LV_AddItem(child0);
2840 else
2841 LV_UpdateItem(child0);
2842 break;
2843 case SHCNE_RMDIR:
2844 case SHCNE_DELETE:
2845 case SHCNE_DRIVEREMOVED:
2846 if (child0)
2847 LV_DeleteItem(child0);
2848 break;
2849 case SHCNE_RENAMEFOLDER:
2850 case SHCNE_RENAMEITEM:
2851 if (child0 && child1)
2852 LV_RenameItem(child0, child1);
2853 else if (child0)
2854 LV_DeleteItem(child0);
2855 else if (child1)
2856 LV_AddItem(child1);
2857 break;
2858 case SHCNE_UPDATEITEM:
2859 if (child0)
2860 LV_UpdateItem(child0);
2861 break;
2862 case SHCNE_UPDATEIMAGE:
2864 case SHCNE_MEDIAREMOVED:
2865 case SHCNE_ASSOCCHANGED:
2867 break;
2868 case SHCNE_UPDATEDIR:
2869 case SHCNE_ATTRIBUTES:
2870 Refresh();
2872 break;
2873 case SHCNE_FREESPACE:
2875 break;
2876 }
2877
2879 return TRUE;
2880}
2881
2884
2886{
2887 if (!m_pCM)
2888 {
2889 /* no menu */
2890 ERR("no context menu\n");
2891 return FALSE;
2892 }
2893
2894 // lParam of WM_DRAWITEM WM_MEASUREITEM contains a menu id and
2895 // this also needs to be changed to a menu identifier offset
2896 UINT CmdID;
2897 HRESULT hres = SHGetMenuIdFromMenuMsg(uMsg, lParam, &CmdID);
2898 if (SUCCEEDED(hres))
2900
2901 /* Forward the message to the IContextMenu2 */
2904
2905 return (SUCCEEDED(hres));
2906}
2907
2909{
2910 /* Wallpaper setting affects drop shadows effect */
2911 if (wParam == SPI_SETDESKWALLPAPER || wParam == 0)
2913
2914 return S_OK;
2915}
2916
2918{
2919 HMENU hmenu = (HMENU) wParam;
2920 int nPos = LOWORD(lParam);
2921 UINT menuItemId;
2922
2923 if (m_pCM)
2924 OnCustomItem(uMsg, wParam, lParam, bHandled);
2925
2927
2928 if (GetSelections() == 0)
2929 {
2936 }
2937 else
2938 {
2939 // FIXME: Check copyable
2946 }
2947
2948 /* Lets try to find out what the hell wParam is */
2949 if (hmenu == GetSubMenu(m_hMenu, nPos))
2950 menuItemId = ReallyGetMenuItemID(m_hMenu, nPos);
2951 else if (hViewMenu && hmenu == GetSubMenu(hViewMenu, nPos))
2952 menuItemId = ReallyGetMenuItemID(hViewMenu, nPos);
2953 else if (m_hContextMenu && hmenu == GetSubMenu(m_hContextMenu, nPos))
2954 menuItemId = ReallyGetMenuItemID(m_hContextMenu, nPos);
2955 else
2956 return FALSE;
2957
2958 switch (menuItemId)
2959 {
2960 case FCIDM_MENU_FILE:
2961 FillFileMenu();
2962 break;
2963 case FCIDM_MENU_VIEW:
2964 case FCIDM_SHVIEW_VIEW:
2966 break;
2969 break;
2970 }
2971
2972 return FALSE;
2973}
2974
2975
2976// The INTERFACE of the IShellView object
2977
2979{
2980 TRACE("(%p)\n", this);
2981
2982 *phWnd = m_hWnd;
2983
2984 return S_OK;
2985}
2986
2988{
2989 FIXME("(%p) stub\n", this);
2990
2991 return E_NOTIMPL;
2992}
2993
2994// FIXME: use the accel functions
2996{
2997 if (m_isEditing)
2998 return S_FALSE;
2999
3000 if (lpmsg->message >= WM_KEYFIRST && lpmsg->message <= WM_KEYLAST)
3001 {
3002 if (::TranslateAcceleratorW(m_hWnd, m_hAccel, lpmsg) != 0)
3003 return S_OK;
3004
3005 TRACE("-- key=0x%04lx\n", lpmsg->wParam);
3006 }
3007
3008 return m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0);
3009}
3010
3012{
3013 FIXME("(%p)\n", this);
3014 return E_NOTIMPL;
3015}
3016
3018{
3019 TRACE("(%p)->(state=%x)\n", this, uState);
3020
3021 // don't do anything if the state isn't changing
3022 if (m_uState == uState)
3023 return S_OK;
3024
3025 // OnActivate handles the menu merging and internal state
3026 DoActivate(uState);
3027
3028 // only do this if we are active
3029 if (uState != SVUIA_DEACTIVATE)
3030 {
3032
3033 // Set the text for the status bar
3035 }
3036
3037 return S_OK;
3038}
3039
3041{
3042 TRACE("(%p)\n", this);
3043
3045
3047 FillList();
3048
3049 return S_OK;
3050}
3051
3053{
3054 return CreateViewWindow3(psb, lpPrevView, SV3CVW3_DEFAULT,
3055 (FOLDERFLAGS)lpfs->fFlags, (FOLDERFLAGS)lpfs->fFlags, (FOLDERVIEWMODE)lpfs->ViewMode, NULL, prcView, phWnd);
3056}
3057
3059{
3060 TRACE("(%p)\n", this);
3061
3062 /* Make absolutely sure all our UI is cleaned up */
3064
3065 if (m_hAccel)
3066 {
3067 // MSDN: Accelerator tables loaded from resources are freed automatically when application terminates
3068 m_hAccel = NULL;
3069 }
3070
3072 {
3075 }
3076
3077 if (m_hMenuViewModes)
3078 {
3081 }
3082
3083 if (m_hMenu)
3084 {
3086 m_hMenu = NULL;
3087 }
3088
3089 if (m_ListView)
3090 {
3091 m_ListView.DestroyWindow();
3092 }
3093
3094 if (m_hWnd)
3095 {
3097 DestroyWindow();
3098 }
3099
3102
3103 return S_OK;
3104}
3105
3107{
3108 TRACE("(%p)->(%p) vmode=%x flags=%x\n", this, lpfs,
3110
3111 if (!lpfs)
3112 return E_INVALIDARG;
3113
3114 *lpfs = m_FolderSettings;
3115 return S_OK;
3116}
3117
3119{
3120 TRACE("(%p)->(0x%lX, %p, %p)\n", this, dwReserved, lpfn, lparam);
3121
3124 return S_OK;
3125}
3126
3128{
3129 ULONG read;
3130 HRESULT hr = pS->Read(buffer, cb, &read);
3131 return FAILED(hr) ? hr : (cb == read ? S_OK : HResultFromWin32(ERROR_MORE_DATA));
3132}
3133
3135{
3136 DWORD value;
3138 return SUCCEEDED(hr) ? value : def;
3139}
3140
3142{
3143 CLSID clsid;
3145 if (SUCCEEDED(hr))
3146 {
3147 WCHAR path[MAX_PATH], name[39];
3148 wsprintfW(path, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
3150 *ppStream = SHOpenRegStream2W(HKEY_CURRENT_USER, path, name, Stgm);
3151 hr = *ppStream ? S_OK : E_FAIL;
3152 }
3153 return hr;
3154}
3155
3157{
3159 if (FAILED(hr))
3160 return hr;
3161 if (cols.Signature != PERSISTCOLUMNS::SIG || cols.Count > cols.MAXCOUNT)
3163 return Read(pS, &cols.Columns, sizeof(*cols.Columns) * cols.Count);
3164}
3165
3167{
3169 PERSISTCOLUMNS cols;
3172 bool fallback = false;
3173 HRESULT hrColumns = E_FAIL;
3175 if (SUCCEEDED(hr))
3176 {
3177 DWORD data;
3178 if (FAILED(hr = SHPropertyBag_ReadDWORD(pPB, L"Mode", &data)))
3179 goto loadfallback;
3181 cvs.FolderSettings.fFlags = ReadDWORD(pPB, L"FFlags", FWF_NOGROUPING);
3182 data = ReadDWORD(pPB, L"Sort", ~0ul);
3184 cvs.SortDir = (INT8)ReadDWORD(pPB, L"SortDir", 1);
3185 if (SUCCEEDED(hrColumns = SHPropertyBag_ReadStream(pPB, L"ColInfo", &pS)))
3186 hrColumns = LoadColumnsStream(cols, pS);
3187 }
3188 else
3189 {
3190 if (FAILED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_READ, &pS) : E_UNEXPECTED)))
3191 {
3192 loadfallback:
3194 fallback = true;
3195 }
3196 if (FAILED(hr) || FAILED(hr = Read(pS, &cvs, sizeof(cvs))))
3197 return hr;
3198 if (cvs.Signature != cvs.SIG)
3200 hrColumns = LoadColumnsStream(cols, pS);
3201 }
3203 m_FolderSettings.fFlags &= ~cvs.VALIDFWF;
3205 if (SUCCEEDED(hrColumns))
3206 {
3207 BOOL failed = FALSE;
3208 if ((m_LoadColumnsList = DPA_Create(cols.Count)) != NULL)
3209 {
3210 for (UINT i = 0; i < cols.Count; ++i)
3211 {
3212 failed |= !DPA_SetPtr(m_LoadColumnsList, i, UlongToPtr(cols.Columns[i]));
3213 }
3214 }
3215 if (failed || !cols.Count)
3216 {
3219 }
3220 }
3223 m_sortInfo.Direction = cvs.SortDir > 0 ? 1 : -1;
3225 return hr;
3226}
3227
3229{
3230 if (!m_ListView.m_hWnd)
3231 return E_UNEXPECTED;
3234 cvs.SortColId = sortcol >= 0 ? (WORD)sortcol : 0;
3236 PERSISTCOLUMNS cols;
3238 cols.Count = 0;
3239 LVCOLUMN lvc;
3240 lvc.mask = LVCF_WIDTH | LVCF_SUBITEM;
3241 for (UINT i = 0, j = 0; i < PERSISTCOLUMNS::MAXCOUNT && ListView_GetColumn(m_ListView, j, &lvc); ++j)
3242 {
3243 HRESULT hr = MapListColumnToFolderColumn(lvc.iSubItem);
3244 if (SUCCEEDED(hr))
3245 {
3246 cols.Columns[i] = MAKELONG(hr, lvc.cx);
3247 cols.Count = ++i;
3248 }
3249 }
3250 UINT cbColumns = FIELD_OFFSET(PERSISTCOLUMNS, Columns) + (sizeof(*cols.Columns) * cols.Count);
3252
3253 IPropertyBag *pPB;
3254 HRESULT hr = S_OK;
3255 if (pStream)
3256 {
3257 pStream->AddRef();
3258 goto stream;
3259 }
3261 if (SUCCEEDED(hr))
3262 {
3263 UINT uViewMode;
3264 GetCurrentViewMode(&uViewMode);
3265 hr = SHPropertyBag_WriteDWORD(pPB, L"Mode", uViewMode);
3267 SHPropertyBag_WriteDWORD(pPB, L"Sort", cvs.SortColId);
3268 SHPropertyBag_WriteDWORD(pPB, L"SortDir", cvs.SortDir);
3269 pStream = cols.Count ? SHCreateMemStream((LPBYTE)&cols, cbColumns) : NULL;
3270 if (!pStream || FAILED(SHPropertyBag_WriteStream(pPB, L"ColInfo", pStream)))
3271 SHPropertyBag_Delete(pPB, L"ColInfo");
3272#if 0 // TODO
3274 memcpy(name, L"ItemPos", sizeof(L"ItemPos"));
3275 if (SHGetPerScreenResName(name + 7, _countof(name) - 7, 0))
3276 {
3277 if (GetAutoArrange() == S_FALSE)
3278 // TODO: Save listview item positions
3279 else
3281 }
3282#endif
3283 pPB->Release();
3284 }
3285 else if (SUCCEEDED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_WRITE, &pStream) : E_UNEXPECTED)))
3286 {
3287 stream:
3288 ULONG written;
3289 cvs.Signature = cvs.SIG;
3291 hr = pStream->Write(&cvs, sizeof(cvs), &written);
3292 if (SUCCEEDED(hr))
3293 hr = pStream->Write(&cols, cbColumns, &written);
3294 }
3295 if (pStream)
3296 pStream->Release();
3297 return hr;
3298}
3299
3301{
3303 return SaveViewState(NULL);
3304 return S_FALSE;
3305}
3306
3307#define UPDATEFOLDERVIEWFLAGS(bits, bit, set) ( (bits) = ((bits) & ~(bit)) | ((set) ? (bit) : 0) )
3309{
3313}
3314
3316{
3317 int i;
3318
3319 TRACE("(%p)->(pidl=%p, 0x%08x) stub\n", this, pidl, uFlags);
3320
3321 if (!m_ListView)
3322 {
3323 ERR("!m_ListView\n");
3324 return E_FAIL;
3325 }
3326
3327 i = LV_FindItemByPidl(pidl);
3328 if (i == -1)
3329 return S_OK;
3330
3331 LVITEMW lvItem = {0};
3332 lvItem.mask = LVIF_STATE;
3334
3335 while (m_ListView.GetItem(&lvItem))
3336 {
3337 if (lvItem.iItem == i)
3338 {
3339 if (uFlags & SVSI_SELECT)
3340 lvItem.state |= LVIS_SELECTED;
3341 else
3342 lvItem.state &= ~LVIS_SELECTED;
3343
3344 if (uFlags & SVSI_FOCUSED)
3345 lvItem.state |= LVIS_FOCUSED;
3346 else
3347 lvItem.state &= ~LVIS_FOCUSED;
3348 }
3349 else
3350 {
3351 if (uFlags & SVSI_DESELECTOTHERS)
3352 {
3353 lvItem.state &= ~LVIS_SELECTED;
3354 }
3355 lvItem.state &= ~LVIS_FOCUSED;
3356 }
3357
3358 m_ListView.SetItem(&lvItem);
3359 lvItem.iItem++;
3360 }
3361
3362 if (uFlags & SVSI_ENSUREVISIBLE)
3364
3365 if((uFlags & SVSI_EDIT) == SVSI_EDIT)
3367
3368 return S_OK;
3369}
3370
3372{
3374
3375 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
3376
3377 if (!ppvOut)
3378 return E_INVALIDARG;
3379
3380 *ppvOut = NULL;
3381
3382 switch (uItem)
3383 {
3384 case SVGIO_BACKGROUND:
3385 if (IsEqualIID(riid, IID_IContextMenu))
3386 {
3389 return hr;
3390
3391 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3392 }
3393 else if (IsEqualIID(riid, IID_IDispatch))
3394 {
3396 {
3399 return hr;
3400 }
3401 hr = m_pShellFolderViewDual->QueryInterface(riid, ppvOut);
3402 }
3403 break;
3404 case SVGIO_SELECTION:
3405 GetSelections();
3406 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, riid, 0, ppvOut);
3408 return hr;
3409
3410 if (IsEqualIID(riid, IID_IContextMenu))
3411 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3412
3413 break;
3414 }
3415
3416 TRACE("-- (%p)->(interface=%p)\n", this, *ppvOut);
3417
3418 return hr;
3419}
3420
3422{
3426 mode = temp;
3427 return mode;
3428}
3429
3431{
3432 TRACE("(%p)->(%p), stub\n", this, pViewMode);
3433
3434 if (!pViewMode)
3435 return E_INVALIDARG;
3436
3437 *pViewMode = m_FolderSettings.ViewMode;
3438 return S_OK;
3439}
3440
3442{
3443 DWORD dwStyle;
3444 TRACE("(%p)->(%u), stub\n", this, ViewMode);
3445
3446 /* It's not redundant to check FVM_AUTO because it's a (UINT)-1 */
3447 if (((INT)ViewMode < FVM_FIRST || (INT)ViewMode > FVM_LAST) && ((INT)ViewMode != FVM_AUTO))
3448 return E_INVALIDARG;
3449
3450 /* Windows before Vista uses LVM_SETVIEW and possibly
3451 LVM_SETEXTENDEDLISTVIEWSTYLE to set the style of the listview,
3452 while later versions seem to accomplish this through other
3453 means. */
3454 switch (ViewMode)
3455 {
3456 case FVM_ICON:
3457 dwStyle = LVS_ICON;
3458 break;
3459 case FVM_DETAILS:
3460 dwStyle = LVS_REPORT;
3461 break;
3462 case FVM_SMALLICON:
3463 dwStyle = LVS_SMALLICON;
3464 break;
3465 case FVM_LIST:
3466 dwStyle = LVS_LIST;
3467 break;
3468 default:
3469 {
3470 FIXME("ViewMode %d not implemented\n", ViewMode);
3471 dwStyle = LVS_LIST;
3472 break;
3473 }
3474 }
3475
3476 m_ListView.ModifyStyle(LVS_TYPEMASK, dwStyle);
3477
3478 /* This will not necessarily be the actual mode set above.
3479 This mimics the behavior of Windows XP. */
3480 m_FolderSettings.ViewMode = ViewMode;
3481
3482 return S_OK;
3483}
3484
3486{
3487 if (m_pSFParent == NULL)
3488 return E_FAIL;
3489
3490 return m_pSFParent->QueryInterface(riid, ppv);
3491}
3492
3494{
3495 PCUITEMID_CHILD pidl = _PidlByItem(iItemIndex);
3496 if (pidl)
3497 {
3498 *ppidl = ILClone(pidl);
3499 return S_OK;
3500 }
3501
3502 *ppidl = 0;
3503 return E_INVALIDARG;
3504}
3505
3507{
3508 TRACE("(%p)->(%u %p)\n", this, uFlags, pcItems);
3509
3510 if (uFlags != SVGIO_ALLVIEW)
3511 FIXME("some flags unsupported, %x\n", uFlags & ~SVGIO_ALLVIEW);
3512
3514
3515 return S_OK;
3516}
3517
3519{
3520 return E_NOTIMPL;
3521}
3522
3524{
3525 TRACE("(%p)->(%p)\n", this, piItem);
3526
3527 *piItem = m_ListView.GetSelectionMark();
3528
3529 return S_OK;
3530}
3531
3533{
3534 TRACE("(%p)->(%p)\n", this, piItem);
3535
3536 *piItem = m_ListView.GetNextItem(-1, LVNI_FOCUSED);
3537
3538 return S_OK;
3539}
3540
3542{
3543 if (!m_ListView)
3544 {
3545 ERR("!m_ListView\n");
3546 return E_FAIL;
3547 }
3548
3549 int lvIndex = LV_FindItemByPidl(pidl);
3550 if (lvIndex == -1 || ppt == NULL)
3551 return E_INVALIDARG;
3552
3553 m_ListView.GetItemPosition(lvIndex, ppt);
3554 return S_OK;
3555}
3556
3558{
3559 TRACE("(%p)->(%p)\n", this, ppt);
3560
3561 if (!m_ListView)
3562 {
3563 ERR("!m_ListView\n");
3564 return S_FALSE;
3565 }
3566
3567 if (ppt)
3568 {
3569 SIZE spacing;
3570 m_ListView.GetItemSpacing(spacing);
3571
3572 ppt->x = spacing.cx;
3573 ppt->y = spacing.cy;
3574 }
3575
3576 return S_OK;
3577}
3578
3580{
3581 return E_NOTIMPL;
3582}
3583
3585{
3586 return ((m_ListView.GetStyle() & LVS_AUTOARRANGE) ? S_OK : S_FALSE);
3587}
3588
3590{
3591 DWORD dwExStyle = (DWORD)m_ListView.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
3592 return ((dwExStyle & LVS_EX_SNAPTOGRID) ? S_OK : S_FALSE);
3593}
3594
3596{
3597 LVITEMW lvItem;
3598
3599 TRACE("(%p)->(%d, %x)\n", this, iItem, dwFlags);
3600
3601 lvItem.state = 0;
3602 lvItem.stateMask = LVIS_SELECTED;
3603
3604 if (dwFlags & SVSI_ENSUREVISIBLE)
3605 m_ListView.EnsureVisible(iItem, 0);
3606
3607 /* all items */
3608 if (dwFlags & SVSI_DESELECTOTHERS)
3610
3611 /* this item */
3612 if (dwFlags & SVSI_SELECT)
3613 lvItem.state |= LVIS_SELECTED;
3614
3615 if (dwFlags & SVSI_FOCUSED)
3616 lvItem.stateMask |= LVIS_FOCUSED;
3617
3618 m_ListView.SetItemState(iItem, lvItem.state, lvItem.stateMask);
3619
3620 if ((dwFlags & SVSI_EDIT) == SVSI_EDIT)
3621 m_ListView.EditLabel(iItem);
3622
3623 return S_OK;
3624}
3625
3627{
3629
3630 /* Reset the selection */
3632
3633 int lvIndex;
3634 for (UINT i = 0 ; i < cidl; i++)
3635 {
3636 lvIndex = LV_FindItemByPidl(apidl[i]);
3637 if (lvIndex != -1)
3638 {
3639 SelectItem(lvIndex, dwFlags);
3640 m_ListView.SetItemPosition(lvIndex, &apt[i]);
3641 }
3642 }
3643
3644 return S_OK;
3645}
3646
3647
3648// IShellView2 implementation
3649
3651{
3652 FIXME("(%p)->(%p, %lu) stub\n", this, view_guid, view_type);
3653 return E_NOTIMPL;
3654}
3655
3657{
3658 return CreateViewWindow3(view_params->psbOwner, view_params->psvPrev,
3659 SV3CVW3_DEFAULT, (FOLDERFLAGS)view_params->pfs->fFlags, (FOLDERFLAGS)view_params->pfs->fFlags,
3660 (FOLDERVIEWMODE)view_params->pfs->ViewMode, view_params->pvid, view_params->prcView, &view_params->hwndView);
3661}
3662
3664{
3665 OLEMENUGROUPWIDTHS omw = { { 0, 0, 0, 0, 0, 0 } };
3666 const UINT SUPPORTED_SV3CVW3 = SV3CVW3_FORCEVIEWMODE | SV3CVW3_FORCEFOLDERFLAGS;
3667 const UINT IGNORE_FWF = FWF_OWNERDATA; // FIXME: Support this
3668
3669 *hwnd = NULL;
3670
3671 TRACE("(%p)->(shlview=%p shlbrs=%p rec=%p hwnd=%p vmode=%x flags=%x)\n", this, psvPrevious, psb, prcView, hwnd, mode, flags);
3672 if (prcView != NULL)
3673 TRACE("-- left=%i top=%i right=%i bottom=%i\n", prcView->left, prcView->top, prcView->right, prcView->bottom);
3674
3675 /* Validate the Shell Browser */
3676 if (psb == NULL || m_hWnd)
3677 return E_UNEXPECTED;
3678
3679 if (view_flags & ~SUPPORTED_SV3CVW3)
3680 FIXME("unsupported view flags 0x%08x\n", view_flags & ~SUPPORTED_SV3CVW3);
3681
3682 if (mode == FVM_AUTO)
3684
3685 /* Set up the member variables */
3686 m_pShellBrowser = psb;
3688 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3689
3690 if (view_id)
3691 {
3692 if (IsEqualIID(*view_id, VID_LargeIcons))
3694 else if (IsEqualIID(*view_id, VID_SmallIcons))
3696 else if (IsEqualIID(*view_id, VID_List))
3698 else if (IsEqualIID(*view_id, VID_Details))
3700 else if (IsEqualIID(*view_id, VID_Thumbnails))
3702 else if (IsEqualIID(*view_id, VID_Tile))
3704 else if (IsEqualIID(*view_id, VID_ThumbStrip))
3706 else
3707 FIXME("Ignoring unrecognized VID %s\n", debugstr_guid(view_id));
3708 }
3709 const UINT requestedViewMode = m_FolderSettings.ViewMode;
3710
3711 /* Get our parent window */
3712 m_pShellBrowser->GetWindow(&m_hWndParent);
3713
3714 /* Try to get the ICommDlgBrowserInterface, adds a reference !!! */
3717 {
3718 TRACE("-- CommDlgBrowser\n");
3719 }
3720
3721 LoadViewState();
3722 if (view_flags & SV3CVW3_FORCEVIEWMODE)
3723 m_FolderSettings.ViewMode = requestedViewMode;
3724 if (view_flags & SV3CVW3_FORCEFOLDERFLAGS)
3725 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3726
3727 RECT rcView = *prcView;
3729 if (m_hWnd == NULL)
3730 return E_FAIL;
3731
3732 *hwnd = m_hWnd;
3733
3734 CheckToolbar();
3735
3736 if (!*hwnd)
3737 return E_FAIL;
3738
3740
3742 UpdateWindow();
3743
3744 if (!m_hMenu)
3745 {
3746 m_hMenu = CreateMenu();
3747 m_pShellBrowser->InsertMenusSB(m_hMenu, &omw);
3748 TRACE("-- after fnInsertMenusSB\n");
3749 }
3750
3751 _MergeToolbar();
3752
3753 return S_OK;
3754}
3755
3757{
3758 FIXME("(%p)->(%p) stub\n", this, new_pidl);
3759 return E_NOTIMPL;
3760}
3761
3763{
3764 FIXME("(%p)->(%p, %u, %p) stub\n", this, item, flags, point);
3765 return E_NOTIMPL;
3766}
3767
3768// IShellFolderView implementation
3769
3771{
3772 FIXME("(%p)->(%ld) stub\n", this, sort);
3773 return E_NOTIMPL;
3774}
3775
3777{
3778 FIXME("(%p)->(%p) stub\n", this, sort);
3779 return E_NOTIMPL;
3780}
3781
3783{
3785 return S_OK;
3786}
3787
3789{
3790 m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
3792 return S_OK;
3793}
3794
3796{
3797 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3798 if (!m_ListView)
3799 {
3800 ERR("!m_ListView\n");
3801 return E_FAIL;
3802 }
3803 *item = LV_AddItem(pidl);
3804 return (int)*item >= 0 ? S_OK : E_OUTOFMEMORY;
3805}
3806
3808{
3809 TRACE("(%p)->(%p %d)\n", this, pidl, item);
3810 return Item(item, pidl);
3811}
3812
3814{
3815 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3816
3817 if (!m_ListView)
3818 {
3819 ERR("!m_ListView\n");
3820 return E_FAIL;
3821 }
3822
3823 if (pidl)
3824 {
3827 }
3828 else
3829 {
3830 *item = 0;
3832 }
3833
3834 return S_OK;
3835}
3836
3838{
3839 TRACE("(%p)->(%p)\n", this, count);
3841 return S_OK;
3842}
3843
3845{
3846 FIXME("(%p)->(%d %x) stub\n", this, count, flags);
3847 return E_NOTIMPL;
3848}
3849
3851{
3852 FIXME("(%p)->(%p %p %p) stub\n", this, pidl_old, pidl_new, item);
3853 return E_NOTIMPL;
3854}
3855
3857{
3858 FIXME("(%p)->(%p %p) stub\n", this, pidl, item);
3859 return E_NOTIMPL;
3860}
3861
3863{
3864 TRACE("(%p)->(%d)\n", this, redraw);
3865 if (m_ListView)
3867 return S_OK;
3868}
3869
3871{
3872 FIXME("(%p)->(%p) stub\n", this, count);
3873 return E_NOTIMPL;
3874}
3875
3877{
3878 TRACE("(%p)->(%p %p)\n", this, pidl, items);
3879
3880 *items = GetSelections();
3881
3882 if (*items)
3883 {
3884 *pidl = static_cast<PCUITEMID_CHILD *>(LocalAlloc(0, *items * sizeof(PCUITEMID_CHILD)));
3885 if (!*pidl)
3886 {
3887 return E_OUTOFMEMORY;
3888 }
3889
3890 /* it's documented that caller shouldn't PIDLs, only array itself */
3891 memcpy(*pidl, m_apidl, *items * sizeof(PCUITEMID_CHILD));
3892 }
3893
3894 return S_OK;
3895}
3896
3898{
3899 if ((m_iDragOverItem == -1 || m_pCurDropTarget == NULL) &&
3901 {
3902 return S_OK;
3903 }
3904
3905 return S_FALSE;
3906}
3907
3909{
3910 if (!pt)
3911 return E_INVALIDARG;
3912
3914 return S_OK;
3915}
3916
3918{
3919 FIXME("(%p)->(%p) stub\n", this, pt);
3920 return E_NOTIMPL;
3921}
3922
3924{
3925 TRACE("(%p)->(%p)\n", this, obj);
3926 return E_NOTIMPL;
3927}
3928
3930{
3931 FIXME("(%p)->(%p %p) stub\n", this, pidl, pt);
3932 return E_NOTIMPL;
3933}
3934
3936{
3937 FIXME("(%p)->(%p) stub\n", this, drop_target);
3938 return E_NOTIMPL;
3939}
3940
3942{
3943 FIXME("(%p)->(%d) stub\n", this, move);
3944 return E_NOTIMPL;
3945}
3946
3948{
3949 FIXME("(%p)->(%p) stub\n", this, obj);
3950 return E_NOTIMPL;
3951}
3952
3954{
3955 FIXME("(%p)->(%p) stub\n", this, spacing);
3956 return E_NOTIMPL;
3957}
3958
3959HRESULT STDMETHODCALLTYPE CDefView::SetCallback(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb)
3960{
3961 if (old_cb)
3962 *old_cb = m_pShellFolderViewCB.Detach();
3963
3964 m_pShellFolderViewCB = new_cb;
3965 return S_OK;
3966}
3967
3969{
3970 FIXME("(%p)->(%d) stub\n", this, flags);
3971 return E_NOTIMPL;
3972}
3973
3975{
3976 TRACE("(%p)->(%p)\n", this, support);
3977 return S_OK;
3978}
3979
3981{
3982 FIXME("(%p)->(%p) stub\n", this, disp);
3983 return E_NOTIMPL;
3984}
3985
3986HRESULT WINAPI CDefView::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
3987{
3988 FIXME("(%p)->(%p(%s) 0x%08x %p %p\n",
3989 this, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
3990
3991 if (!prgCmds)
3992 return E_INVALIDARG;
3993
3994 for (UINT i = 0; i < cCmds; i++)
3995 {
3996 FIXME("\tprgCmds[%d].cmdID = %d\n", i, prgCmds[i].cmdID);
3997 prgCmds[i].cmdf = 0;
3998 }
3999
4000 return OLECMDERR_E_UNKNOWNGROUP;
4001}
4002
4004// ISVOleCmdTarget_Exec(IOleCommandTarget)
4005//
4006// nCmdID is the OLECMDID_* enumeration
4007HRESULT WINAPI CDefView::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
4008{
4009 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n",
4010 this, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
4011
4012 if (!pguidCmdGroup)
4013 return OLECMDERR_E_UNKNOWNGROUP;
4014
4015 if (IsEqualCLSID(*pguidCmdGroup, m_Category))
4016 {
4017 if (nCmdID == FCIDM_SHVIEW_AUTOARRANGE)
4018 {
4019 if (V_VT(pvaIn) != VT_INT_PTR)
4020 return OLECMDERR_E_NOTSUPPORTED;
4021
4023 params.cbSize = sizeof(params);
4024 params.rcExclude = *(RECT*) V_INTREF(pvaIn);
4025
4026 if (m_hMenuViewModes)
4027 {
4028 // Duplicate all but the last two items of the view modes menu
4029 HMENU hmenuViewPopup = CreatePopupMenu();
4030 Shell_MergeMenus(hmenuViewPopup, m_hMenuViewModes, 0, 0, 0xFFFF, 0);
4031 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4032 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4033 CheckViewMode(hmenuViewPopup);
4034 TrackPopupMenuEx(hmenuViewPopup, TPM_LEFTALIGN | TPM_TOPALIGN, params.rcExclude.left, params.rcExclude.bottom, m_hWndParent, &params);
4035 ::DestroyMenu(hmenuViewPopup);
4036 }
4037
4038 // pvaOut is VT_I4 with value 0x403 (cmd id of the new mode maybe?)
4039 V_VT(pvaOut) = VT_I4;
4040 V_I4(pvaOut) = 0x403;
4041 }
4042 }
4043
4044 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer) &&
4045 (nCmdID == 0x29) &&
4046 (nCmdexecopt == 4) && pvaOut)
4047 return S_OK;
4048
4049 if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView) &&
4050 (nCmdID == 9) &&
4051 (nCmdexecopt == 0))
4052 return 1;
4053
4054 if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
4055 {
4056 CComPtr<IStream> pStream;
4057 WCHAR SubKey[MAX_PATH];
4058 switch (nCmdID)
4059 {
4061 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4063 SaveViewState(pStream);
4064 break;
4066 wsprintfW(SubKey, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
4068 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4069 m_FolderSettings.fFlags |= FWF_NOBROWSERVIEWSTATE; // Don't let this folder save itself
4070 break;
4071 }
4072 }
4073
4074 return OLECMDERR_E_UNKNOWNGROUP;
4075}
4076
4077/**********************************************************
4078 * ISVDropTarget implementation
4079 */
4080
4081/******************************************************************************
4082 * drag_notify_subitem [Internal]
4083 *
4084 * Figure out the shellfolder object, which is currently under the mouse cursor
4085 * and notify it via the IDropTarget interface.
4086 */
4087
4088#define SCROLLAREAWIDTH 20
4089
4091{
4092 LONG lResult;
4093 HRESULT hr;
4094 RECT clientRect;
4095
4096 /* The key state on drop doesn't have MK_LBUTTON or MK_RBUTTON because it
4097 reflects the key state after the user released the button, so we need
4098 to remember the last key state when the button was pressed */
4099 m_grfKeyState = grfKeyState;
4100
4101 // Map from global to client coordinates and query the index of the
4102 // listview-item, which is currently under the mouse cursor.
4103 LVHITTESTINFO htinfo = {{pt.x, pt.y}, LVHT_ONITEM};
4104 ScreenToClient(&htinfo.pt);
4105 lResult = m_ListView.HitTest(&htinfo);
4106
4107 /* Send WM_*SCROLL messages every 250 ms during drag-scrolling */
4108 ::GetClientRect(m_ListView, &clientRect);
4109 if (htinfo.pt.x == m_ptLastMousePos.x && htinfo.pt.y == m_ptLastMousePos.y &&
4110 (htinfo.pt.x < SCROLLAREAWIDTH || htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH ||
4111 htinfo.pt.y < SCROLLAREAWIDTH || htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH))
4112 {
4113 m_cScrollDelay = (m_cScrollDelay + 1) % 5; // DragOver is called every 50 ms
4114 if (m_cScrollDelay == 0)
4115 {
4116 /* Mouse did hover another 250 ms over the scroll-area */
4117 if (htinfo.pt.x < SCROLLAREAWIDTH)
4118 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEUP, 0);
4119
4120 if (htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH)
4121 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEDOWN, 0);
4122
4123 if (htinfo.pt.y < SCROLLAREAWIDTH)
4124 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEUP, 0);
4125
4126 if (htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH)
4127 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEDOWN, 0);
4128 }
4129 }
4130 else
4131 {
4132 m_cScrollDelay = 0; // Reset, if cursor is not over the listview's scroll-area
4133 }
4134
4135 m_ptLastMousePos = htinfo.pt;
4137
4138 /* We need to check if we drag the selection over itself */
4139 if (lResult != -1 && m_pSourceDataObject.p != NULL)
4140 {
4141 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4142
4143 for (UINT i = 0; i < m_cidl; i++)
4144 {
4145 if (pidl == m_apidl[i])
4146 {
4147 /* The item that is being draged is hovering itself. */
4148 lResult = -1;
4149 break;
4150 }
4151 }
4152 }
4153
4154 // If we are still over the previous sub-item, notify it via DragOver and return
4155 if (m_pCurDropTarget && lResult == m_iDragOverItem)
4156 return m_pCurDropTarget->DragOver(grfKeyState, pt, pdwEffect);
4157
4158 // We've left the previous sub-item, notify it via DragLeave and release it
4159 if (m_pCurDropTarget)
4160 {
4162 if (pidl)
4163 SelectItem(pidl, 0);
4164
4165 m_pCurDropTarget->DragLeave();
4167 }
4168
4169 m_iDragOverItem = lResult;
4170
4171 if (lResult == -1)
4172 {
4173 // We are not above one of the listview's subitems. Bind to the
4174 // parent folder's DropTarget interface.
4176 }
4177 else
4178 {
4179 // Query the relative PIDL of the shellfolder object represented
4180 // by the currently dragged over listview-item ...
4181 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4182
4183 // ... and bind m_pCurDropTarget to the IDropTarget interface of an UIObject of this object
4184 hr = m_pSFParent->GetUIObjectOf(m_ListView, 1, &pidl, IID_NULL_PPV_ARG(IDropTarget, &m_pCurDropTarget));
4185 }
4186
4188
4189 // If anything failed, m_pCurDropTarget should be NULL now, which ought to be a save state
4190 if (FAILED(hr))
4191 {
4192 *pdwEffect = DROPEFFECT_NONE;
4193 return hr;
4194 }
4195
4196 if (m_iDragOverItem != -1)
4197 {
4198 SelectItem(m_iDragOverItem, SVSI_SELECT);
4199 }
4200
4201 // Notify the item just entered via DragEnter
4202 return m_pCurDropTarget->DragEnter(m_pCurDataObject, grfKeyState, pt, pdwEffect);
4203}
4204
4205HRESULT WINAPI CDefView::DragEnter(IDataObject *pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
4206{
4207 if (*pdwEffect == DROPEFFECT_NONE)
4208 return S_OK;
4209
4210 /* Get a hold on the data object for later calls to DragEnter on the sub-folders */
4211 m_pCurDataObject = pDataObject;
4212
4213 HRESULT hr = drag_notify_subitem(grfKeyState, pt, pdwEffect);
4214 if (SUCCEEDED(hr))
4215 {
4216 POINT ptClient = {pt.x, pt.y};
4217 ScreenToClient(&ptClient);
4218 ImageList_DragEnter(m_hWnd, ptClient.x, ptClient.y);
4219 }
4220
4221 return hr;
4222}
4223
4225{
4226 POINT ptClient = {pt.x, pt.y};
4227 ScreenToClient(&ptClient);
4228 ImageList_DragMove(ptClient.x, ptClient.y);
4229 return drag_notify_subitem(grfKeyState, pt, pdwEffect);
4230}
4231
4233{
4235
4236 if (m_pCurDropTarget)
4237 {
4238 m_pCurDropTarget->DragLeave();
4240 }
4241
4242 if (m_pCurDataObject != NULL)
4243 {
4245 }
4246
4247 m_iDragOverItem = 0;
4248
4249 return S_OK;
4250}
4251
4253{
4254 RECT rcBound;
4255 INT i, nCount = m_ListView.GetItemCount();
4256 DWORD dwSpacing;
4257 INT dx, dy;
4258 BOOL bSmall = ((m_ListView.GetStyle() & LVS_TYPEMASK) != LVS_ICON);
4259
4260 // FIXME: LVM_GETORIGIN is broken. See CORE-17266
4261 pt.x += m_ListView.GetScrollPos(SB_HORZ);
4262 pt.y += m_ListView.GetScrollPos(SB_VERT);
4263
4264 if (m_ListView.GetStyle() & LVS_ALIGNLEFT)
4265 {
4266 // vertically
4267 for (i = 0; i < nCount; ++i)
4268 {
4269 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4270 dx = LOWORD(dwSpacing);
4271 dy = HIWORD(dwSpacing);
4273 rcBound.right = rcBound.left + dx;
4274 rcBound.bottom = rcBound.top + dy;
4275 if (pt.x < rcBound.right && pt.y < (rcBound.top + rcBound.bottom) / 2)
4276 {
4277 return i;
4278 }
4279 }
4280 for (i = nCount - 1; i >= 0; --i)
4281 {
4283 if (rcBound.left < pt.x && rcBound.top < pt.y)
4284 {
4285 return i + 1;
4286 }
4287 }
4288 }
4289 else
4290 {
4291 // horizontally
4292 for (i = 0; i < nCount; ++i)
4293 {
4294 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4295 dx = LOWORD(dwSpacing);
4296 dy = HIWORD(dwSpacing);
4298 rcBound.right = rcBound.left + dx;
4299 rcBound.bottom = rcBound.top + dy;
4300 if (pt.y < rcBound.bottom && pt.x < rcBound.left)
4301 {
4302 return i;
4303 }
4304 if (pt.y < rcBound.bottom && pt.x < rcBound.right)
4305 {
4306 return i + 1;
4307 }
4308 }
4309 for (i = nCount - 1; i >= 0; --i)
4310 {
4312 if (rcBound.left < pt.x && rcBound.top < pt.y)
4313 {
4314 return i + 1;
4315 }
4316 }
4317 }
4318
4319 return nCount;
4320}
4321
4323{
4324 LRESULT lResult;
4325
4327 {
4328 int nPartArray[] = {-1};
4329 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4330 return;
4331 }
4332
4333 int nFileSizePartLength = 125;
4334 const int nLocationPartLength = 150;
4335 const int nRightPartsLength = nFileSizePartLength + nLocationPartLength;
4336 int nObjectsPartLength = nWidth - nRightPartsLength;
4337
4338 // If the window is small enough just divide each part into thirds
4339 // to match the behavior of Windows Server 2003
4340 if (nObjectsPartLength <= nLocationPartLength)
4341 nObjectsPartLength = nFileSizePartLength = nWidth / 3;
4342
4343 int nPartArray[] = {nObjectsPartLength, nObjectsPartLength + nFileSizePartLength, -1};
4344
4345 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4346}
4347
4349{
4350 // Get the handle for the status bar
4351 HWND fStatusBar;
4352 m_pShellBrowser->GetControlWindow(FCW_STATUS, &fStatusBar);
4353
4354 // Get the size of our status bar
4355 RECT statusBarSize;
4356 ::GetWindowRect(fStatusBar, &statusBarSize);
4357
4358 // Resize the status bar
4359 _HandleStatusBarResize(statusBarSize.right - statusBarSize.left);
4360}
4361
4363
4364static INT CALLBACK
4365SelectionMoveCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
4366{
4367 CLParamIndexMap *pmap = (CLParamIndexMap *)lParamSort;
4368 INT i1 = pmap->Lookup(lParam1), i2 = pmap->Lookup(lParam2);
4369 if (i1 < i2)
4370 return -1;
4371 if (i1 > i2)
4372 return 1;
4373 return 0;
4374}
4375
4377{
4378 // get insertable index from position
4380
4381 // create identity mapping of indexes
4383 INT nCount = m_ListView.GetItemCount();
4384 for (INT i = 0; i < nCount; ++i)
4385 {
4386 array.Add(i);
4387 }
4388
4389 // re-ordering mapping
4390 INT iItem = -1;
4391 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4392 {
4393 INT iFrom = iItem, iTo = iPosition;
4394 if (iFrom < iTo)
4395 --iTo;
4396 if (iFrom >= nCount)
4397 iFrom = nCount - 1;
4398 if (iTo >= nCount)
4399 iTo = nCount - 1;
4400
4401 // shift indexes by swapping (like a bucket relay)
4402 if (iFrom < iTo)
4403 {
4404 for (INT i = iFrom; i < iTo; ++i)
4405 {
4406 // swap array[i] and array[i + 1]
4407 INT tmp = array[i];
4408 array[i] = array[i + 1];
4409 array[i + 1] = tmp;
4410 }
4411 }
4412 else
4413 {
4414 for (INT i = iFrom; i > iTo; --i)
4415 {
4416 // swap array[i] and array[i - 1]
4417 INT tmp = array[i];
4418 array[i] = array[i - 1];
4419 array[i - 1] = tmp;
4420 }
4421 }
4422 }
4423
4424 // create mapping (ListView's lParam to index) from array
4426 for (INT i = 0; i < nCount; ++i)
4427 {
4429 map.Add(lParam, i);
4430 }
4431
4432 // finally sort
4434}
4435
4436HRESULT WINAPI CDefView::Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
4437{
4440
4441 if ((IsDropOnSource(NULL) == S_OK) &&
4442 (*pdwEffect & DROPEFFECT_MOVE) &&
4444 {
4445 if (m_pCurDropTarget)
4446 {
4447 m_pCurDropTarget->DragLeave();
4449 }
4450
4451 POINT ptDrop = { pt.x, pt.y };
4452 ::ScreenToClient(m_ListView, &ptDrop);
4454 m_ptLastMousePos = ptDrop;
4455
4457 if (m_ListView.GetStyle() & LVS_AUTOARRANGE)
4458 {
4460 }
4461 else
4462 {
4463 POINT ptItem;
4464 INT iItem = -1;
4465 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4466 {
4467 if (m_ListView.GetItemPosition(iItem, &ptItem))
4468 {
4471 m_ListView.SetItemPosition(iItem, &ptItem);
4472 }
4473 }
4474 }
4476 }
4477 else if (m_pCurDropTarget)
4478 {
4479 m_pCurDropTarget->Drop(pDataObject, grfKeyState, pt, pdwEffect);
4481 }
4482
4484 m_iDragOverItem = 0;
4485 return S_OK;
4486}
4487
4489{
4490 TRACE("(%p)\n", this);
4491
4492 if (fEscapePressed)
4493 return DRAGDROP_S_CANCEL;
4494 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
4495 return DRAGDROP_S_DROP;
4496 else
4497 return S_OK;
4498}
4499
4501{
4502 TRACE("(%p)\n", this);
4503
4505}
4506
4507HRESULT WINAPI CDefView::Draw(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL (CALLBACK *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue)
4508{
4509 FIXME("Stub: this=%p\n", this);
4510 return E_NOTIMPL;
4511}
4512
4513HRESULT WINAPI CDefView::GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDevice, LOGPALETTE **ppColorSet)
4514{
4515 FIXME("Stub: this=%p\n", this);
4516 return E_NOTIMPL;
4517}
4518
4519HRESULT WINAPI CDefView::Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze)
4520{
4521 FIXME("Stub: this=%p\n", this);
4522 return E_NOTIMPL;
4523}
4524
4526{
4527 FIXME("Stub: this=%p\n", this);
4528 return E_NOTIMPL;
4529}
4530
4532{
4533 FIXME("partial stub: %p 0x%08x 0x%08x %p\n", this, aspects, advf, pAdvSink);
4534
4535 // FIXME: we set the AdviseSink, but never use it to send any advice
4536 m_pAdvSink = pAdvSink;
4537 m_dwAspects = aspects;
4538 m_dwAdvf = advf;
4539
4540 return S_OK;
4541}
4542
4544{
4545 TRACE("this=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n", this, pAspects, pAdvf, ppAdvSink);
4546
4547 if (ppAdvSink)
4548 {
4549 *ppAdvSink = m_pAdvSink;
4550 m_pAdvSink.p->AddRef();
4551 }
4552
4553 if (pAspects)
4554 *pAspects = m_dwAspects;
4555
4556 if (pAdvf)
4557 *pAdvf = m_dwAdvf;
4558
4559 return S_OK;
4560}
4561
4563{
4564 if (IsEqualIID(guidService, SID_IShellBrowser))
4565 return m_pShellBrowser->QueryInterface(riid, ppvObject);
4566 else if(IsEqualIID(guidService, SID_IFolderView))
4567 return QueryInterface(riid, ppvObject);
4568
4569 return E_NOINTERFACE;
4570}
4571
4573{
4575 HRESULT hr = S_OK;
4576
4577 hr = IUnknown_QueryService(m_pShellBrowser, IID_IExplorerToolbar, IID_PPV_ARG(IExplorerToolbar, &ptb));
4578 if (FAILED(hr))
4579 return hr;
4580
4581 m_Category = CGID_DefViewFrame;
4582
4583 hr = ptb->SetCommandTarget(static_cast<IOleCommandTarget*>(this), &m_Category, 0);
4584 if (FAILED(hr))
4585 return hr;
4586
4587 if (hr == S_FALSE)
4588 return S_OK;
4589
4590#if 0
4591 hr = ptb->AddButtons(&m_Category, buttonsCount, buttons);
4592 if (FAILED(hr))
4593 return hr;
4594#endif
4595
4596 return S_OK;
4597}
4598
4600{
4602
4604 {
4605 hr = m_pShellFolderViewCB->MessageSFVCB(uMsg, wParam, lParam);
4606 }
4607
4608 return hr;
4609}
4610
4612{
4613 return ShellObjectCreatorInit<CDefView>(pFolder, riid, ppvOut);
4614}
4615
4617 LPCSFV psvcbi, // [in] shelltemplate struct
4618 IShellView **ppsv) // [out] IShellView pointer
4619{
4621 HRESULT hRes;
4622
4623 TRACE("sf=%p pidl=%p cb=%p mode=0x%08x parm=%p\n",
4624 psvcbi->pshf, psvcbi->pidl, psvcbi->pfnCallback,
4625 psvcbi->fvm, psvcbi->psvOuter);
4626
4627 *ppsv = NULL;
4628 hRes = CDefView_CreateInstance(psvcbi->pshf, IID_PPV_ARG(IShellView, &psv));
4629 if (FAILED_UNEXPECTEDLY(hRes))
4630 return hRes;
4631
4632 *ppsv = psv.Detach();
4633 return hRes;
4634}
4635
4637 IShellView **ppsv)
4638{
4640 HRESULT hRes;
4641
4642 if (!ppsv)
4643 return E_INVALIDARG;
4644
4645 *ppsv = NULL;
4646
4647 if (!pcsfv || pcsfv->cbSize != sizeof(*pcsfv))
4648 return E_INVALIDARG;
4649
4650 TRACE("sf=%p outer=%p callback=%p\n",
4651 pcsfv->pshf, pcsfv->psvOuter, pcsfv->psfvcb);
4652
4653 hRes = CDefView_CreateInstance(pcsfv->pshf, IID_PPV_ARG(IShellView, &psv));
4654 if (FAILED(hRes))
4655 return hRes;
4656
4657 if (pcsfv->psfvcb)
4658 {
4660 if (SUCCEEDED(psv->QueryInterface(IID_PPV_ARG(IShellFolderView, &sfv))))
4661 {
4662 sfv->SetCallback(pcsfv->psfvcb, NULL);
4663 }
4664 }
4665
4666 *ppsv = psv.Detach();
4667 return hRes;
4668}
static HDC hDC
Definition: 3dtext.c:33
HRESULT CDefViewBckgrndMenu_CreateInstance(IShellFolder *psf, REFIID riid, void **ppv)
HRESULT WINAPI CDefViewDual_Constructor(REFIID riid, LPVOID *ppvOut)
static UINT GetContextMenuFlags(IShellBrowser *pSB, SFGAOF sfgao)
Definition: CDefView.cpp:103
static BOOL AppendMenuItem(HMENU hMenu, UINT MF, UINT Id, LPCWSTR String, SIZE_T Data=0)
Definition: CDefView.cpp:156
#define GET_WM_COMMAND_HWND(wp, lp)
Definition: CDefView.cpp:549
static SIZE_T GetMenuItemDataById(HMENU hMenu, UINT Id)
Definition: CDefView.cpp:169
CSimpleMap< LPARAM, INT > CLParamIndexMap
Definition: CDefView.cpp:4362
#define SCROLLAREAWIDTH
Definition: CDefView.cpp:4088
#define SHV_UPDATESTATUSBAR
Definition: CDefView.cpp:77
struct LISTVIEW_SORT_INFO * LPLISTVIEW_SORT_INFO
static BOOL ILIsParentOrSpecialParent(PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2)
Definition: CDefView.cpp:2776
void(CALLBACK * PFNSHGETSETTINGSPROC)(LPSHELLFLAGSTATE lpsfs, DWORD dwMask)
Definition: CDefView.cpp:552
#define SHV_CHANGE_NOTIFY
Definition: CDefView.cpp:76
#define GET_WM_COMMAND_ID(wp, lp)
Definition: CDefView.cpp:548
#define CONTEXT_MENU_BASE_ID
Definition: CDefView.cpp:81
#define UPDATEFOLDERVIEWFLAGS(bits, bit, set)
Definition: CDefView.cpp:3307
HRESULT SHSetMenuIdInMenuMsg(UINT uMsg, LPARAM lParam, UINT CmdId)
HRESULT CDefView_CreateInstance(IShellFolder *pFolder, REFIID riid, LPVOID *ppvOut)
Definition: CDefView.cpp:4611
#define ID_LISTVIEW
Definition: CDefView.cpp:545
static HRESULT LoadColumnsStream(PERSISTCOLUMNS &cols, IStream *pS)
Definition: CDefView.cpp:3156
#define GET_WM_COMMAND_CMD(wp, lp)
Definition: CDefView.cpp:550
static UINT ReallyGetMenuItemID(HMENU hmenu, int i)
Definition: CDefView.cpp:191
static INT CALLBACK SelectionMoveCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
Definition: CDefView.cpp:4365
@ DEFVIEW_ARRANGESORT_MAX
Definition: CDefView.cpp:48
@ DVIDM_CONTEXTMENU_LAST
Definition: CDefView.cpp:52
@ DVIDM_ARRANGESORT_FIRST
Definition: CDefView.cpp:50
@ DEFVIEW_ARRANGESORT_MAXENUM
Definition: CDefView.cpp:47
@ DVIDM_ARRANGESORT_LAST
Definition: CDefView.cpp:49
@ DVIDM_CONTEXTMENU_FIRST
Definition: CDefView.cpp:56
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4636
static DWORD ReadDWORD(IPropertyBag *pPB, LPCWSTR name, DWORD def)
Definition: CDefView.cpp:3134
static HMENU GetSubmenuByID(HMENU hmenu, UINT id)
Definition: CDefView.cpp:180
static VOID DrawTileBitmap(HDC hDC, LPCRECT prc, HBITMAP hbm, INT nWidth, INT nHeight, INT dx, INT dy)
Definition: CDefView.cpp:1593
static HRESULT SHGetLVColumnSubItem(HWND List, UINT Col)
Definition: CDefView.cpp:969
static void ClientToListView(HWND hwndLV, POINT *ppt)
Definition: CDefView.cpp:118
DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:4504
static UINT CalculateCharWidth(HWND hwnd)
Definition: CDefView.cpp:200
static BOOL SelectExtOnRename(void)
Definition: CDefView.cpp:2503
HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV psvcbi, IShellView **ppsv)
Definition: CDefView.cpp:4616
HRESULT SHGetMenuIdFromMenuMsg(UINT uMsg, LPARAM lParam, UINT *CmdId)
DWORD Id
#define SFVM_GETCOMMANDDIR
#define SFVM_CANSELECTALL
#define SFVM_GET_CUSTOMVIEWINFO
#define SFVM_GETNAMELENGTH
#define SFVM_VIEWRELEASE
#define SFVM_ADDINGOBJECT
#define SFVM_REMOVINGOBJECT
#define SFVM_LISTREFRESHED
#define SFVM_WINDOWCLOSING
#define SFVM_SELECTIONCHANGED
unsigned char BOOLEAN
unsigned long long UINT64
signed char INT8
unsigned char UINT8
#define shell32_hInstance
@ lparam
Definition: SystemMenu.c:31
_STLP_MOVE_TO_STD_NAMESPACE void sort(_RandomAccessIter __first, _RandomAccessIter __last)
Definition: _algo.c:993
#define read
Definition: acwin.h:96
static int state
Definition: maze.c:121
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
int sortcol
Definition: sort.c:23
static const COLUMN_LIST Columns[]
Definition: listview.c:19
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define U(x)
Definition: wordpad.c:45
@ Create
Definition: registry.c:563
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERR(fmt,...)
Definition: precomp.h:57
#define STDMETHOD(m)
Definition: basetyps.h:62
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
#define RegCloseKey(hKey)
Definition: registry.h:49
EXTERN_C HANDLE WINAPI SHChangeNotification_Lock(HANDLE hTicket, DWORD dwOwnerPID, LPITEMIDLIST **lppidls, LPLONG lpwEventId)
EXTERN_C ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, INT fSources, LONG wEventMask, UINT uMsg, INT cItems, SHChangeNotifyEntry *lpItems)
EXTERN_C BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock)
EXTERN_C BOOL WINAPI SHChangeNotifyDeregister(ULONG hNotify)
void Release()
Definition: atlcomcli.h:170
T * Detach()
Definition: atlcomcli.h:186
static LRESULT CALLBACK StartWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1619
BOOL DestroyWindow()
Definition: atlwin.h:462
CWindow GetParent() const
Definition: atlwin.h:700
BOOL IsWindowVisible() const
Definition: atlwin.h:958
BOOL UpdateWindow()
Definition: atlwin.h:1345
HWND m_hWnd
Definition: atlwin.h:273
STDMETHOD() Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CDefView.cpp:4436
STDMETHOD() Unfreeze(DWORD dwFreeze) override
Definition: CDefView.cpp:4525
HMENU m_hMenu
Definition: CDefView.cpp:237
HRESULT LoadColumn(UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth=0)
Definition: CDefView.cpp:1044
LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1549
CComPtr< IShellFolder > m_pSFParent
Definition: CDefView.cpp:227
LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2391
STDMETHOD() GetAutoArrange() override
Definition: CDefView.cpp:3584
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2371
STDMETHOD() SelectAndPositionItem(LPCITEMIDLIST item, UINT flags, POINT *point) override
Definition: CDefView.cpp:3762
HRESULT OnStateChange(UINT uFlags)
Definition: CDefView.cpp:651
HDPA m_LoadColumnsList
Definition: CDefView.cpp:246
static INT CALLBACK fill_list(LPVOID ptr, LPVOID arg)
Definition: CDefView.cpp:1436
CComPtr< IShellDetails > m_pSDParent
Definition: CDefView.cpp:229
STDMETHOD() DestroyViewWindow() override
Definition: CDefView.cpp:3058
LRESULT OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1641
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2118
int LV_AddItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1306
STDMETHOD() SetItemPos(PCUITEMID_CHILD pidl, POINT *pt) override
Definition: CDefView.cpp:3929
bool m_ScheduledStatusbarUpdate
Definition: CDefView.cpp:269
HRESULT FillFileMenu()
Definition: CDefView.cpp:1750
STDMETHOD() RemoveObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:3813
void UpdateStatusbar()
Definition: CDefView.cpp:689
BOOL IsDesktop() const
Definition: CDefView.cpp:286
HMENU m_hMenuArrangeModes
Definition: CDefView.cpp:238
CComPtr< IDataObject > m_pCurDataObject
Definition: CDefView.cpp:257
HRESULT FillEditMenu()
Definition: CDefView.cpp:1792
STDMETHOD() SetAutomationObject(IDispatch *disp) override
Definition: CDefView.cpp:3980
CComPtr< IShellFolderViewDual > m_pShellFolderViewDual
Definition: CDefView.cpp:233
STDMETHOD() DragLeave() override
Definition: CDefView.cpp:4232
LRESULT OnNCCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1655
STDMETHOD() AutoArrange() override
Definition: CDefView.cpp:3788
BOOL CreateList()
Definition: CDefView.cpp:787
void UpdateListColors()
Definition: CDefView.cpp:883
HWND m_hWndParent
Definition: CDefView.cpp:235
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
Definition: CDefView.cpp:2987
STDMETHOD() AddPropertySheetPages(DWORD dwReserved, LPFNSVADDPROPSHEETPAGE pfn, LPARAM lparam) override
Definition: CDefView.cpp:3118
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
Definition: CDefView.cpp:4562
BOOLEAN LV_DeleteItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1328
STDMETHOD() GetItemObject(UINT uItem, REFIID riid, void **ppv) override
Definition: CDefView.cpp:3371
STDMETHOD() GetObjectCount(UINT *count) override
Definition: CDefView.cpp:3837
HRESULT _MergeToolbar()
Definition: CDefView.cpp:4572
STDMETHOD() SetCallback(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb) override
Definition: CDefView.cpp:3959
HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
Definition: CDefView.cpp:4090
DWORD m_dwAdvf
Definition: CDefView.cpp:252
HRESULT _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:4599
STDMETHOD() Items(UINT uFlags, REFIID riid, void **ppv) override
Definition: CDefView.cpp:3518
STDMETHOD() CreateViewWindow2(LPSV2CVW2_PARAMS view_params) override
Definition: CDefView.cpp:3656
STDMETHOD() SelectItem(PCUITEMID_CHILD pidlItem, SVSIF uFlags) override
Definition: CDefView.cpp:3315
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2272
STDMETHOD() GetAdvise(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) override
Definition: CDefView.cpp:4543
LRESULT OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1557
void CheckToolbar()
Definition: CDefView.cpp:670
HRESULT IncludeObject(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:623
BOOLEAN LV_UpdateItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1384
DWORD m_dwAspects
Definition: CDefView.cpp:251
STDMETHOD() SaveViewState() override
Definition: CDefView.cpp:3300
CComPtr< IContextMenu > m_pCM
Definition: CDefView.cpp:264
CComPtr< IShellBrowser > m_pShellBrowser
Definition: CDefView.cpp:231
void _DoCopyToMoveToFolder(BOOL bCopy)
Definition: CDefView.cpp:2342
HRESULT GetDetailsByListColumn(PCUITEMID_CHILD pidl, UINT ListCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1035
BOOL m_isParentFolderSpecial
Definition: CDefView.cpp:268
INT _FindInsertableIndexFromPoint(POINT pt)
Definition: CDefView.cpp:4252
LRESULT OnPrintClient(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1614
LRESULT DoColumnContextMenu(LRESULT lParam)
Definition: CDefView.cpp:1894
UINT m_cScrollDelay
Definition: CDefView.cpp:259
LISTVIEW_SORT_INFO m_sortInfo
Definition: CDefView.cpp:248
CComPtr< IDataObject > m_pSourceDataObject
Definition: CDefView.cpp:255
HRESULT CheckViewMode(HMENU hmenuView)
Definition: CDefView.cpp:1881
CComPtr< IAdviseSink > m_pAdvSink
Definition: CDefView.cpp:253
void _HandleStatusBarResize(int width)
Definition: CDefView.cpp:4322
STDMETHOD() SetCurrentViewMode(UINT ViewMode) override
Definition: CDefView.cpp:3441
LRESULT OnInitMenuPopup(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2917
LRESULT OnUpdateStatusbar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:776
POINT m_ptFirstMousePos
Definition: CDefView.cpp:261
LRESULT OnExplorerCommand(UINT uCommand, BOOL bUseSelection)
Definition: CDefView.cpp:2222
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2908
STDMETHOD() GetItemPosition(PCUITEMID_CHILD pidl, POINT *ppt) override
Definition: CDefView.cpp:3541
STDMETHOD() SetPoints(IDataObject *obj) override
Definition: CDefView.cpp:3947
STDMETHOD() IsDropOnSource(IDropTarget *drop_target) override
Definition: CDefView.cpp:3897
HRESULT FillList(BOOL IsRefreshCommand=TRUE)
Definition: CDefView.cpp:1453
CComPtr< IDropTarget > m_pCurDropTarget
Definition: CDefView.cpp:256
PIDLIST_ABSOLUTE m_pidlParent
Definition: CDefView.cpp:245
STDMETHOD() GetSelectionMarkedItem(int *piItem) override
Definition: CDefView.cpp:3523
STDMETHOD() TranslateAccelerator(MSG *pmsg) override
Definition: CDefView.cpp:2995
STDMETHOD() QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) override
Definition: CDefView.cpp:4488
virtual WNDPROC GetWindowProc()
Definition: CDefView.cpp:485
STDMETHOD() Draw(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, BOOL(STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue) override
Definition: CDefView.cpp:4507
LRESULT OnCustomItem(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2885
HMENU m_hContextMenu
Definition: CDefView.cpp:240
CComPtr< IShellFolderViewCB > m_pShellFolderViewCB
Definition: CDefView.cpp:230
STDMETHOD() GiveFeedback(DWORD dwEffect) override
Definition: CDefView.cpp:4500
STDMETHOD() ArrangeGrid() override
Definition: CDefView.cpp:3782
STDMETHOD() SetRedraw(BOOL redraw) override
Definition: CDefView.cpp:3862
HRESULT OpenSelectedItems()
Definition: CDefView.cpp:2078
void _ForceStatusBarResize()
Definition: CDefView.cpp:4348
BOOL m_Destroyed
Definition: CDefView.cpp:272
CComPtr< IContextMenu > m_pFileMenu
Definition: CDefView.cpp:265
HRESULT WINAPI Initialize(IShellFolder *shellFolder)
Definition: CDefView.cpp:612
PCUITEMID_CHILD * m_apidl
Definition: CDefView.cpp:244
void LV_RefreshIcons()
Definition: CDefView.cpp:1422
LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2365
STDMETHOD() GetSelectedObjects(PCUITEMID_CHILD **pidl, UINT *items) override
Definition: CDefView.cpp:3876
HDPA m_ListToFolderColMap
Definition: CDefView.cpp:247
STDMETHOD() QuerySupport(UINT *support) override
Definition: CDefView.cpp:3974
void OnDeactivate()
Definition: CDefView.cpp:2297
LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1582
void _MoveSelectionOnAutoArrange(POINT pt)
Definition: CDefView.cpp:4376
static INT CALLBACK ListViewCompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData)
Definition: CDefView.cpp:1211
STDMETHOD() GetDefaultSpacing(POINT *ppt) override
Definition: CDefView.cpp:3579
CLSID m_Category
Definition: CDefView.cpp:271
HRESULT FillArrangeAsMenu(HMENU hmenuArrange)
Definition: CDefView.cpp:1825
STDMETHOD() UpdateObject(PITEMID_CHILD pidl_old, PITEMID_CHILD pidl_new, UINT *item) override
Definition: CDefView.cpp:3850
STDMETHOD() GetItemSpacing(ITEMSPACING *spacing) override
Definition: CDefView.cpp:3953
static ATL::CWndClassInfo & GetWndClassInfo()
Definition: CDefView.cpp:472
CComPtr< IShellFolder2 > m_pSF2Parent
Definition: CDefView.cpp:228
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2403
STDMETHOD() AddObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:3795
STDMETHOD() GetDropPoint(POINT *pt) override
Definition: CDefView.cpp:3917
HICON m_hMyComputerIcon
Definition: CDefView.cpp:275
STDMETHOD() GetSelectedCount(UINT *count) override
Definition: CDefView.cpp:3870
STDMETHOD() GetFocusedItem(int *piItem) override
Definition: CDefView.cpp:3532
STDMETHOD() GetSpacing(POINT *ppt) override
Definition: CDefView.cpp:3557
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1562
STDMETHOD() CreateViewWindow(IShellView *psvPrevious, LPCFOLDERSETTINGS pfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd) override
Definition: CDefView.cpp:3052
FOLDERVIEWMODE GetDefaultViewMode()
Definition: CDefView.cpp:3421
STDMETHOD() GetDragPoint(POINT *pt) override
Definition: CDefView.cpp:3908
BOOL m_bmenuBarInitialized
Definition: CDefView.cpp:241
HRESULT MapFolderColumnToListColumn(UINT FoldCol)
Definition: CDefView.cpp:979
PCUITEMID_CHILD _PidlByItem(int i)
Definition: CDefView.cpp:1277
UINT m_cidl
Definition: CDefView.cpp:243
void ColumnListChanged()
Definition: CDefView.cpp:1146
STDMETHOD() GetFolder(REFIID riid, void **ppv) override
Definition: CDefView.cpp:3485
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
Definition: CDefView.cpp:4007
UINT m_uState
Definition: CDefView.cpp:242
STDMETHOD() DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CDefView.cpp:4224
STDMETHOD() Rearrange(LPARAM sort) override
Definition: CDefView.cpp:3770
HRESULT InvokeContextMenuCommand(CComPtr< IContextMenu > &pCM, LPCSTR lpVerb, POINT *pt=NULL)
Definition: CDefView.cpp:2034
DWORD m_grfKeyState
Definition: CDefView.cpp:262
STDMETHOD() GetView(SHELLVIEWID *view_guid, ULONG view_type) override
Definition: CDefView.cpp:3650
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
Definition: CDefView.cpp:3986
HRESULT _GetSnapToGrid()
Definition: CDefView.cpp:3589
STDMETHOD() HandleRename(LPCITEMIDLIST new_pidl) override
Definition: CDefView.cpp:3756
void LV_RefreshIcon(INT iItem)
Definition: CDefView.cpp:1411
HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream)
Definition: CDefView.cpp:3141
UINT GetSelections()
Definition: CDefView.cpp:2001
BOOL m_isEditing
Definition: CDefView.cpp:267
BOOLEAN LV_RenameItem(PCUITEMID_CHILD pidlOld, PCUITEMID_CHILD pidlNew)
Definition: CDefView.cpp:1345
STDMETHOD() GetCurrentInfo(LPFOLDERSETTINGS pfs) override
Definition: CDefView.cpp:3106
CComPtr< ICommDlgBrowser > m_pCommDlgBrowser
Definition: CDefView.cpp:232
STDMETHOD() GetCurrentViewMode(UINT *pViewMode) override
Definition: CDefView.cpp:3430
POINT m_ptLastMousePos
Definition: CDefView.cpp:260
STDMETHOD() RefreshObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:3856
BOOL InitList()
Definition: CDefView.cpp:940
ULONG m_hNotify
Definition: CDefView.cpp:249
STDMETHOD() IsBkDropTarget(IDropTarget *drop_target) override
Definition: CDefView.cpp:3935
HRESULT MapListColumnToFolderColumn(UINT ListCol)
Definition: CDefView.cpp:992
STDMETHOD() Refresh() override
Definition: CDefView.cpp:3040
HRESULT LoadViewState()
Definition: CDefView.cpp:3166
HRESULT GetDetailsByFolderColumn(PCUITEMID_CHILD pidl, UINT FoldCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1013
STDMETHOD() SelectAndPositionItems(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, POINT *apt, DWORD dwFlags) override
Definition: CDefView.cpp:3626
HRESULT OnDefaultCommand()
Definition: CDefView.cpp:637
STDMETHOD() SetClipboard(BOOL move) override
Definition: CDefView.cpp:3941
void UpdateFolderViewFlags()
Definition: CDefView.cpp:3308
HRESULT FillViewMenu()
Definition: CDefView.cpp:1809
LONG m_iDragOverItem
Definition: CDefView.cpp:258
STDMETHOD() ItemCount(UINT uFlags, int *pcItems) override
Definition: CDefView.cpp:3506
virtual VOID OnFinalMessage(HWND) override
Definition: CDefView.cpp:1662
LRESULT OnGetShellBrowser(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1650
STDMETHOD() MoveIcons(IDataObject *obj) override
Definition: CDefView.cpp:3923
STDMETHOD() GetWindow(HWND *lphwnd) override
Definition: CDefView.cpp:2978
STDMETHOD() CreateViewWindow3(IShellBrowser *psb, IShellView *psvPrevious, SV3CVW3_FLAGS view_flags, FOLDERFLAGS mask, FOLDERFLAGS flags, FOLDERVIEWMODE mode, const SHELLVIEWID *view_id, const RECT *prcView, HWND *hwnd) override
Definition: CDefView.cpp:3663
HMENU m_hMenuViewModes
Definition: CDefView.cpp:239
HACCEL m_hAccel
Definition: CDefView.cpp:250
STDMETHOD() GetArrangeParam(LPARAM *sort) override
Definition: CDefView.cpp:3776
LRESULT OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2788
STDMETHOD() Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) override
Definition: CDefView.cpp:4519
STDMETHOD() GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet) override
Definition: CDefView.cpp:4513
FOLDERSETTINGS m_FolderSettings
Definition: CDefView.cpp:236
STDMETHOD() DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CDefView.cpp:4205
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:490
STDMETHOD() SetObjectCount(UINT count, UINT flags) override
Definition: CDefView.cpp:3844
STDMETHOD() GetObject(PITEMID_CHILD *pidl, UINT item) override
Definition: CDefView.cpp:3807
LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2520
STDMETHOD() EnableModeless(BOOL fEnable) override
Definition: CDefView.cpp:3011
CListView m_ListView
Definition: CDefView.cpp:234
BOOL _Sort(int Col=-1)
Definition: CDefView.cpp:1225
STDMETHOD() SetAdvise(DWORD aspects, DWORD advf, IAdviseSink *pAdvSink) override
Definition: CDefView.cpp:4531
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1667
STDMETHOD() UIActivate(UINT uState) override
Definition: CDefView.cpp:3017
int LV_FindItemByPidl(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1291
STDMETHOD() Item(int iItemIndex, PITEMID_CHILD *ppidl) override
Definition: CDefView.cpp:3493
HRESULT LoadColumns(SIZE_T *pColList=NULL, UINT ColListCount=0)
Definition: CDefView.cpp:1081
void DoActivate(UINT uState)
Definition: CDefView.cpp:2308
STDMETHOD() Select(UINT flags) override
Definition: CDefView.cpp:3968
SFVM_CUSTOMVIEWINFO_DATA m_viewinfo_data
Definition: CDefView.cpp:273
int GetNextItem(int i, WORD flags)
Definition: rosctrls.h:161
UINT GetItemState(int i, UINT mask)
Definition: rosctrls.h:173
BOOL SetTextBkColor(COLORREF cr)
Definition: rosctrls.h:32
BOOL DeleteAllItems()
Definition: rosctrls.h:126
int InsertItem(const LV_ITEM *pitem)
Definition: rosctrls.h:96
DWORD SetExtendedListViewStyle(DWORD dw, DWORD dwMask=0)
Definition: rosctrls.h:47
void SetRedraw(BOOL redraw)
Definition: rosctrls.h:27
BOOL SortItems(PFNLVCOMPARE pfnCompare, PVOID lParam)
Definition: rosctrls.h:141
void SetItemState(int i, UINT state, UINT mask)
Definition: rosctrls.h:178
int GetItemCount()
Definition: rosctrls.h:121
HWND EditLabel(int i)
Definition: rosctrls.h:151
DWORD_PTR GetItemData(int i)
Definition: rosctrls.h:204
BOOL SetTextColor(COLORREF cr)
Definition: rosctrls.h:42
HIMAGELIST SetImageList(HIMAGELIST himl, int iImageList)
Definition: rosctrls.h:91
BOOL EnsureVisible(int i, BOOL fPartialOK)
Definition: rosctrls.h:146
BOOL SetItemPosition(int nItem, POINT *pPoint)
Definition: rosctrls.h:236
BOOL GetItem(LV_ITEM *pitem)
Definition: rosctrls.h:106
BOOL Update(int i)
Definition: rosctrls.h:131
UINT GetSelectedCount()
Definition: rosctrls.h:136
BOOL Arrange(UINT nCode)
Definition: rosctrls.h:241
void GetItemSpacing(SIZE &spacing, BOOL bSmallIconView=FALSE)
Definition: rosctrls.h:166
BOOL DeleteItem(int i)
Definition: rosctrls.h:101
BOOL SetItem(const LV_ITEM *pitem)
Definition: rosctrls.h:111
int HitTest(LV_HITTESTINFO *phtInfo)
Definition: rosctrls.h:199
BOOL GetItemPosition(int nItem, POINT *pPoint)
Definition: rosctrls.h:231
BOOL SetBkColor(COLORREF cr)
Definition: rosctrls.h:37
int GetSelectionMark()
Definition: rosctrls.h:156
HWND Create(HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
Definition: rosctrls.h:8
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
UINT uFlags
Definition: api.c:59
BOOL WINAPI DPA_SetPtr(HDPA hdpa, INT i, LPVOID p)
Definition: dpa.c:626
BOOL WINAPI DPA_DeleteAllPtrs(HDPA hdpa)
Definition: dpa.c:730
void WINAPI DPA_DestroyCallback(HDPA hdpa, PFNDPAENUMCALLBACK enumProc, LPVOID lParam)
Definition: dpa.c:1003
BOOL WINAPI DPA_Destroy(HDPA hdpa)
Definition: dpa.c:396
HDPA WINAPI DPA_Create(INT nGrow)
Definition: dpa.c:950
INT WINAPI DPA_InsertPtr(HDPA hdpa, INT i, LPVOID p)
Definition: dpa.c:591
VOID WINAPI ImageList_EndDrag(void)
Definition: imagelist.c:1847
BOOL WINAPI ImageList_DragEnter(HWND hwndLock, INT x, INT y)
Definition: imagelist.c:958
BOOL WINAPI ImageList_DragMove(INT x, INT y)
Definition: imagelist.c:1070
BOOL WINAPI ImageList_DragLeave(HWND hwndLock)
Definition: imagelist.c:992
BOOL WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack, INT iTrack, INT dxHotspot, INT dyHotspot)
Definition: imagelist.c:638
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
@ VT_I4
Definition: compat.h:2298
@ VT_INT_PTR
Definition: compat.h:2327
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget)
Definition: ole2.c:557
HRESULT WINAPI DoDragDrop(IDataObject *pDataObject, IDropSource *pDropSource, DWORD dwOKEffect, DWORD *pdwEffect)
Definition: ole2.c:753
HRESULT WINAPI RevokeDragDrop(HWND hwnd)
Definition: ole2.c:639
BOOL SHELL_FS_HideExtension(LPCWSTR szPath)
Definition: CFSFolder.cpp:1355
EXTERN_C HRESULT WINAPI SHGetRealIDL(_In_ IShellFolder *psf, _In_ PCUITEMID_CHILD pidlSimple, _Outptr_ PITEMID_CHILD *ppidlReal)
Definition: utils.cpp:1260
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
BOOL WINAPI IsOS(DWORD feature)
Definition: ordinal.c:4091
#define EnableModeless(type)
Definition: ordinal.c:3532
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1497
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1453
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1407
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2791
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2388
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define assert(x)
Definition: debug.h:53
#define pt(x, y)
Definition: drawing.c:79
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:57
#define RGB(r, g, b)
Definition: precomp.h:71
#define GetBValue(quad)
Definition: precomp.h:75
#define GetGValue(quad)
Definition: precomp.h:74
#define GetRValue(quad)
Definition: precomp.h:73
#define UlongToPtr(u)
Definition: config.h:106
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
POINTL point
Definition: edittest.c:50
static BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FxAutoRegKey hKey
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLint GLint GLsizei width
Definition: gl.h:1546
GLuint buffer
Definition: glext.h:5915
GLenum GLint GLuint mask
Definition: glext.h:6028
GLenum mode
Definition: glext.h:6217
GLenum const GLfloat * params
Definition: glext.h:5645
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLbitfield flags
Definition: glext.h:7161
GLuint64EXT * result
Definition: glext.h:11304
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
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 GLint GLint GLenum GLenum GLenum GLint GLuint GLenum GLenum GLfloat GLenum GLfloat GLenum map
Definition: glfuncs.h:262
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 GLint GLint j
Definition: glfuncs.h:250
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
#define _(X)
Definition: i386-dis.c:35
BOOL WINAPI Shell_GetImageLists(HIMAGELIST *lpBigList, HIMAGELIST *lpSmallList)
Definition: iconcache.cpp:683
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:766
#define UINT_MAX
Definition: limits.h:41
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
const DWORD DROPEFFECT_NONE
Definition: oleidl.idl:929
const DWORD DROPEFFECT_MOVE
Definition: oleidl.idl:931
struct IOleCommandTarget::_tagOLECMDTEXT OLECMDTEXT
struct IOleCommandTarget::_tagOLECMD OLECMD
HRESULT Write([in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten)
HRESULT Read([out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead)
HRESULT GetControlWindow([in] UINT id, [out] HWND *phwnd)
struct IShellView2::_SV2CVW2_PARAMS * LPSV2CVW2_PARAMS
GUID SHELLVIEWID
Definition: shobjidl.idl:794
@ SV3CVW3_FORCEVIEWMODE
Definition: shobjidl.idl:836
@ SV3CVW3_FORCEFOLDERFLAGS
Definition: shobjidl.idl:837
DWORD SV3CVW3_FLAGS
Definition: shobjidl.idl:840
@ SVUIA_DEACTIVATE
Definition: shobjidl.idl:752
@ SVUIA_ACTIVATE_FOCUS
Definition: shobjidl.idl:754
@ SVUIA_ACTIVATE_NOFOCUS
Definition: shobjidl.idl:753
UINT SVSIF
Definition: shobjidl.idl:738
@ SVGIO_SELECTION
Definition: shobjidl.idl:743
@ SVGIO_BACKGROUND
Definition: shobjidl.idl:742
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define C_ASSERT(e)
Definition: intsafe.h:73
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define END_COM_MAP()
Definition: atlcom.h:592
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define END_MSG_MAP()
Definition: atlwin.h:1917
GLint dy
Definition: linetemp.h:97
GLint y0
Definition: linetemp.h:96
if(dx< 0)
Definition: linetemp.h:194
GLint x0
Definition: linetemp.h:95
GLint dx
Definition: linetemp.h:97
#define error(str)
Definition: mkdosfs.c:1605
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define ASSERT(a)
Definition: mode.c:44
static PVOID ptr
Definition: dispmode.c:27
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
HRESULT hres
Definition: protocol.c:465
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
static const WCHAR sd[]
Definition: suminfo.c:286
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static ATOM item
Definition: dde.c:856
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM ULONG int * pcItems
Definition: usp10.c:62
WORD unused[29]
Definition: crypt.c:1155
REFCLSID clsid
Definition: msctf.c:82
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
#define BOOL
Definition: nt_native.h:43
#define KEY_READ
Definition: nt_native.h:1023
#define DWORD
Definition: nt_native.h:44
#define UNICODE_NULL
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#define L(x)
Definition: ntvdm.h:50
#define STGM_WRITE
Definition: objbase.h:918
#define STGM_READ
Definition: objbase.h:917
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
#define V_INTREF(A)
Definition: oleauto.h:252
const GUID IID_IViewObject
const GUID IID_IDispatch
static TCHAR * items[]
Definition: page1.c:45
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_TABSTOP
Definition: pedump.c:634
#define WS_VISIBLE
Definition: pedump.c:620
short SHORT
Definition: pedump.c:59
long LONG
Definition: pedump.c:60
#define WS_CHILDWINDOW
Definition: pedump.c:639
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:940
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:198
BOOL WINAPI ILIsParent(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL bImmediate)
Definition: pidl.c:605
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:712
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:221
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2015
BOOL _ILIsBitBucket(LPCITEMIDLIST pidl)
Definition: pidl.c:1981
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1342
BOOL _ILIsNetHood(LPCITEMIDLIST pidl)
Definition: pidl.c:1948
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2433
BOOL _ILIsControlPanel(LPCITEMIDLIST pidl)
Definition: pidl.c:1959
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:548
#define INT
Definition: polytest.cpp:20
EXTERN_C INT WINAPI SHGetPerScreenResName(_Out_writes_(cchBuffer) LPWSTR pszBuffer, _In_ INT cchBuffer, _In_ DWORD dwReserved)
Definition: propbag.cpp:1938
EXTERN_C HRESULT WINAPI IUnknown_QueryServicePropertyBag(_In_ IUnknown *punk, _In_ long flags, _In_ REFIID riid, _Outptr_ void **ppvObj)
Definition: propbag.cpp:1967
BOOL(CALLBACK * LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM)
Definition: prsht.h:327
#define LVIR_ICON
Definition: commctrl.h:2473
#define NM_RELEASEDCAPTURE
Definition: commctrl.h:141
#define Header_GetItem(hwndHD, i, phdi)
Definition: commctrl.h:751
#define LVSIL_SMALL
Definition: commctrl.h:2299
#define I_IMAGECALLBACK
Definition: commctrl.h:2385
#define LVN_GETDISPINFOA
Definition: commctrl.h:3153
#define LVS_EX_ONECLICKACTIVATE
Definition: commctrl.h:2735
#define ListView_IsGroupViewEnabled(hwnd)
Definition: commctrl.h:3007
#define ListView_GetItemRect(hwnd, i, prc, code)
Definition: commctrl.h:2478
#define LVS_SINGLESEL
Definition: commctrl.h:2266
#define LVS_ICON
Definition: commctrl.h:2261
#define LVS_SHAREIMAGELISTS
Definition: commctrl.h:2270
#define LVN_BEGINRDRAG
Definition: commctrl.h:3141
#define LVS_EX_LABELTIP
Definition: commctrl.h:2743
#define LVN_COLUMNCLICK
Definition: commctrl.h:3139
#define ListView_GetColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2622
#define ListView_InsertColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2636
#define LVS_NOCOLUMNHEADER
Definition: commctrl.h:2284
#define NM_DBLCLK
Definition: commctrl.h:131
#define LPSTR_TEXTCALLBACKW
Definition: commctrl.h:2380
#define LVIF_STATE
Definition: commctrl.h:2312
#define LVS_EX_SNAPTOGRID
Definition: commctrl.h:2748
#define Header_SetItem(hwndHD, i, phdi)
Definition: commctrl.h:758
#define LVS_TYPEMASK
Definition: commctrl.h:2265
#define LVNI_SELECTED
Definition: commctrl.h:2424
#define ListView_GetHeader(hwnd)
Definition: commctrl.h:2651
#define LVHT_ONITEM
Definition: commctrl.h:2497
#define CLR_NONE
Definition: commctrl.h:319
#define LVS_SHOWSELALWAYS
Definition: commctrl.h:2267
#define LVS_REPORT
Definition: commctrl.h:2262
#define LVS_SMALLICON
Definition: commctrl.h:2263
#define LVN_DELETEALLITEMS
Definition: commctrl.h:3134
#define LVM_SETCALLBACKMASK
Definition: commctrl.h:2419
#define LVA_DEFAULT
Definition: commctrl.h:2527
#define LVM_GETEDITCONTROL
Definition: commctrl.h:2542
#define ListView_DeleteColumn(hwnd, iCol)
Definition: commctrl.h:2639
#define CDRF_DODEFAULT
Definition: commctrl.h:268
#define LVCF_WIDTH
Definition: commctrl.h:2587
#define TB_CHECKBUTTON
Definition: commctrl.h:1043
#define LVNI_FOCUSED
Definition: commctrl.h:2423
#define LVN_INSERTITEM
Definition: commctrl.h:3132
#define LVS_ALIGNTOP
Definition: commctrl.h:2279
#define ListView_GetNextItem(hwnd, i, flags)
Definition: commctrl.h:2434
#define HDN_ENDTRACKW
Definition: commctrl.h:850
#define DPA_FastGetPtr(hdpa, i)
Definition: commctrl.h:4960
#define NM_CLICK
Definition: commctrl.h:130
#define LVN_BEGINDRAG
Definition: commctrl.h:3140
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2734
#define NM_KILLFOCUS
Definition: commctrl.h:136
#define SB_SETICON
Definition: commctrl.h:1961
#define LVS_EX_TRACKSELECT
Definition: commctrl.h:2732
#define HDF_SORTUP
Definition: commctrl.h:724
#define ListView_GetOrigin(hwndLV, ppt)
Definition: commctrl.h:2669
#define NM_CUSTOMDRAW
Definition: commctrl.h:137
#define LVN_ENDLABELEDITW
Definition: commctrl.h:3138
#define TB_ENABLEBUTTON
Definition: commctrl.h:1042
#define LVIS_SELECTED
Definition: commctrl.h:2319
#define LVN_BEGINLABELEDITW
Definition: commctrl.h:3136
#define LVITEM
Definition: commctrl.h:2375
#define NM_RETURN
Definition: commctrl.h:132
#define ListView_RedrawItems(hwndLV, iFirst, iLast)
Definition: commctrl.h:2525
#define LVIF_PARAM
Definition: commctrl.h:2311
#define HDI_FORMAT
Definition: commctrl.h:705
struct tagNMLISTVIEW * LPNMLISTVIEW
#define LVM_GETITEMRECT
Definition: commctrl.h:2477
#define LVS_NOSORTHEADER
Definition: commctrl.h:2285
#define LVS_EDITLABELS
Definition: commctrl.h:2273
#define LVIF_TEXT
Definition: commctrl.h:2309
#define LVIR_SELECTBOUNDS
Definition: commctrl.h:2475
#define LVM_GETEXTENDEDLISTVIEWSTYLE
Definition: commctrl.h:2727
#define Header_GetItemCount(hwndHD)
Definition: commctrl.h:734
#define LVA_SNAPTOGRID
Definition: commctrl.h:2530
#define LVCF_FMT
Definition: commctrl.h:2586
#define NM_RCLICK
Definition: commctrl.h:133
#define NM_SETFOCUS
Definition: commctrl.h:135
#define LVCF_SUBITEM
Definition: commctrl.h:2589
#define LV_HITTESTINFO
Definition: commctrl.h:2504
#define DPA_GetPtrPtr(hdpa)
Definition: commctrl.h:4957
#define SB_SETTEXT
Definition: commctrl.h:1949
#define DPA_GetPtrCount(hdpa)
Definition: commctrl.h:4955
#define SB_SETPARTS
Definition: commctrl.h:1954
#define LVN_GETDISPINFOW
Definition: commctrl.h:3154
#define LVS_EX_DOUBLEBUFFER
Definition: commctrl.h:2745
#define ListView_SetColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2629
#define LVIF_IMAGE
Definition: commctrl.h:2310
#define LVS_ALIGNLEFT
Definition: commctrl.h:2280
#define ListView_GetItemSpacing(hwndLV, fSmall)
Definition: commctrl.h:2712
#define LVN_ITEMCHANGED
Definition: commctrl.h:3131
#define LVIF_DI_SETITEM
Definition: commctrl.h:3166
#define LVCF_TEXT
Definition: commctrl.h:2588
#define LVN_DELETEITEM
Definition: commctrl.h:3133
#define HDITEM
Definition: commctrl.h:697
#define LVIS_FOCUSED
Definition: commctrl.h:2318
#define HDF_SORTDOWN
Definition: commctrl.h:725
#define LVCOLUMN
Definition: commctrl.h:2581
#define LVS_AUTOARRANGE
Definition: commctrl.h:2272
#define LVS_LIST
Definition: commctrl.h:2264
#define LVS_EX_INFOTIP
Definition: commctrl.h:2739
#define LVN_ITEMACTIVATE
Definition: commctrl.h:3147
#define LVSIL_NORMAL
Definition: commctrl.h:2298
#define LVIS_CUT
Definition: commctrl.h:2320
#define LVNI_ALL
Definition: commctrl.h:2422
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
void redraw(int x, int y, int cx, int cy)
Definition: qtewin.cpp:1248
#define REGSTR_PATH_EXPLORER
Definition: regstr.h:33
IStream *WINAPI SHOpenRegStream2W(HKEY hKey, LPCWSTR pszSubkey, LPCWSTR pszValue, DWORD dwMode)
Definition: regstream.c:537
IStream *WINAPI SHCreateMemStream(const BYTE *lpbData, UINT dwDataLen)
Definition: regstream.c:652
#define EM_SCROLLCARET
Definition: richedit.h:81
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_PRINTCLIENT
Definition: richedit.h:70
#define WM_NOTIFY
Definition: richedit.h:61
HRESULT WINAPI SHForwardContextMenuMsg(IUnknown *pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pResult, BOOL useIContextMenu2)
Definition: rosordinal.c:11
static calc_node_t temp
Definition: rpn_ieee.c:38
static HWND hEdit
Definition: autocomplete.c:34
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
HRESULT WINAPI SHLimitInputEdit(HWND hWnd, IShellFolder *psf)
Definition: shellord.c:3042
BOOL WINAPI StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:85
BOOL WINAPI StrRetToStrNA(LPSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
Definition: shellstring.c:54
HRESULT HResultFromWin32(DWORD hr)
Definition: shellutils.h:70
#define SHELL_GetSetting(pss, ssf, field)
Definition: shellutils.h:798
HRESULT hr
Definition: shlfolder.c:183
#define SID_IFolderView
#define SID_IShellBrowser
UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
Definition: shlmenu.c:856
#define FCIDM_BROWSERLAST
Definition: shlobj.h:623
#define SHCNE_DRIVEREMOVED
Definition: shlobj.h:1896
#define SFVM_UPDATINGOBJECT
Definition: shlobj.h:1333
#define SHCNE_RMDIR
Definition: shlobj.h:1893
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1318
#define SHCNE_DELETE
Definition: shlobj.h:1891
#define SHCNE_MKDIR
Definition: shlobj.h:1892
#define SFVM_WINDOWCREATED
Definition: shlobj.h:1308
#define SHCNE_UPDATEITEM
Definition: shlobj.h:1902
#define SHCNE_RENAMEITEM
Definition: shlobj.h:1889
#define SSF_DOUBLECLICKINWEBVIEW
Definition: shlobj.h:1609
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1901
#define SHCNE_MEDIAINSERTED
Definition: shlobj.h:1894
#define SHCNE_UPDATEIMAGE
Definition: shlobj.h:1904
#define SFVM_SIZE
Definition: shlobj.h:1338
#define SSF_WIN95CLASSIC
Definition: shlobj.h:1612
#define SHCNE_CREATE
Definition: shlobj.h:1890
#define FCIDM_MENU_VIEW_SEP_OPTIONS
Definition: shlobj.h:633
#define SHCNE_RENAMEFOLDER
Definition: shlobj.h:1906
#define SHCNRF_NewDelivery
Definition: shlobj.h:1937
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2528
#define MM_DONTREMOVESEPS
Definition: shlobj.h:2529
#define SHCNRF_ShellLevel
Definition: shlobj.h:1935
#define SHCNE_MEDIAREMOVED
Definition: shlobj.h:1895
#define FCIDM_MENU_FILE
Definition: shlobj.h:630
#define SHCNE_DRIVEADD
Definition: shlobj.h:1897
#define SHCNE_ASSOCCHANGED
Definition: shlobj.h:1910
#define SFVM_COLUMNCLICK
Definition: shlobj.h:1315
#define SFVM_ADDPROPERTYPAGES
Definition: shlobj.h:1334
#define FCIDM_SHVIEWFIRST
Definition: shlobj.h:580
#define FCIDM_MENU_VIEW
Definition: shlobj.h:632
#define SHCNRF_InterruptLevel
Definition: shlobj.h:1934
#define SHCNE_ATTRIBUTES
Definition: shlobj.h:1900
#define SHCNE_ALLEVENTS
Definition: shlobj.h:1913
#define MM_ADDSEPARATOR
Definition: shlobj.h:2527
#define SSF_SHOWSUPERHIDDEN
Definition: shlobj.h:1620
#define SHCNE_FREESPACE
Definition: shlobj.h:1907
#define SFVM_FSNOTIFY
Definition: shlobj.h:1307
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1604
#define FCIDM_MENU_EDIT
Definition: shlobj.h:631
@ REST_NOVIEWCONTEXTMENU
Definition: shlobj.h:1668
#define SFVM_QUERYFSNOTIFY
Definition: shlobj.h:1316
#define SFVM_GETNOTIFY
Definition: shlobj.h:1336
#define FCIDM_SHVIEWLAST
Definition: shlobj.h:614
#define DVCMDID_SET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:89
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:90
#define OS_SERVERADMINUI
Definition: shlwapi.h:2050
#define SHDeleteKey
Definition: shlwapi.h:44
HRESULT WINAPI SHPropertyBag_ReadDWORD(IPropertyBag *ppb, LPCWSTR pszPropName, DWORD *pdwValue)
HRESULT WINAPI SHPropertyBag_Delete(IPropertyBag *ppb, LPCWSTR pszPropName)
HRESULT WINAPI SHPropertyBag_ReadStream(IPropertyBag *ppb, LPCWSTR pszPropName, IStream **ppStream)
HRESULT WINAPI SHPropertyBag_WriteStream(IPropertyBag *ppb, LPCWSTR pszPropName, IStream *pStream)
HRESULT WINAPI SHPropertyBag_WriteDWORD(IPropertyBag *ppb, LPCWSTR pszPropName, DWORD dwValue)
FOLDERFLAGS
Definition: shobjidl.idl:640
@ FWF_SNAPTOGRID
Definition: shobjidl.idl:643
@ FWF_AUTOARRANGE
Definition: shobjidl.idl:641
@ FWF_NOGROUPING
Definition: shobjidl.idl:661
@ FWF_ALIGNLEFT
Definition: shobjidl.idl:652
@ FWF_NOSCROLL
Definition: shobjidl.idl:651
@ FWF_NOHEADERINALLVIEWS
Definition: shobjidl.idl:665
@ FWF_SINGLECLICKACTIVATE
Definition: shobjidl.idl:656
@ FWF_OWNERDATA
Definition: shobjidl.idl:644
@ FWF_FULLROWSELECT
Definition: shobjidl.idl:662
@ FWF_NOBROWSERVIEWSTATE
Definition: shobjidl.idl:669
@ FWF_NOCLIENTEDGE
Definition: shobjidl.idl:650
@ FWF_TRANSPARENT
Definition: shobjidl.idl:649
@ FWF_SINGLESEL
Definition: shobjidl.idl:647
@ FWF_NOCOLUMNHEADER
Definition: shobjidl.idl:664
@ FWF_DESKTOP
Definition: shobjidl.idl:646
LPARAM LPFNSVADDPROPSHEETPAGE
Definition: shobjidl.idl:117
FOLDERVIEWMODE
Definition: shobjidl.idl:676
@ FVM_SMALLICON
Definition: shobjidl.idl:680
@ FVM_AUTO
Definition: shobjidl.idl:677
@ FVM_LIST
Definition: shobjidl.idl:681
@ FVM_TILE
Definition: shobjidl.idl:684
@ FVM_THUMBNAIL
Definition: shobjidl.idl:683
@ FVM_LAST
Definition: shobjidl.idl:687
@ FVM_THUMBSTRIP
Definition: shobjidl.idl:685
@ FVM_ICON
Definition: shobjidl.idl:678
@ FVM_DETAILS
Definition: shobjidl.idl:682
@ FVM_FIRST
Definition: shobjidl.idl:679
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:150
#define FCIDM_SHVIEW_AUTOARRANGE
Definition: shresdef.h:846
#define FCIDM_SHVIEW_SELECTALL
Definition: shresdef.h:838
#define IDS_OBJECTS_SELECTED
Definition: shresdef.h:286
#define FCIDM_SHVIEW_CUT
Definition: shresdef.h:831
#define FCIDM_SHVIEW_OPEN
Definition: shresdef.h:858
#define FCIDM_SHVIEW_LISTVIEW
Definition: shresdef.h:843
#define FCIDM_SHVIEW_UNDO
Definition: shresdef.h:834
#define FCIDM_SHVIEW_ALIGNTOGRID
Definition: shresdef.h:848
#define FCIDM_SHVIEW_COPY
Definition: shresdef.h:832
#define FCIDM_SHVIEW_BIGICON
Definition: shresdef.h:841
#define IDS_MYCOMPUTER
Definition: shresdef.h:282
#define FCIDM_SHVIEW_INSERTLINK
Definition: shresdef.h:835
#define FCIDM_SHVIEW_REFRESH
Definition: shresdef.h:856
#define IDI_SHELL_COMPUTER_DESKTOP
Definition: shresdef.h:650
#define FCIDM_SHVIEW_NEWFOLDER
Definition: shresdef.h:854
#define FCIDM_SHVIEW_SMALLICON
Definition: shresdef.h:842
#define FCIDM_TB_SMALLICON
Definition: shresdef.h:862
#define FCIDM_SHVIEW_PROPERTIES
Definition: shresdef.h:830
#define FCIDM_SHVIEW_SNAPTOGRID
Definition: shresdef.h:847
#define FCIDM_SHVIEW_VIEW
Definition: shresdef.h:828
#define FCIDM_SHVIEW_COPYTO
Definition: shresdef.h:836
#define FCIDM_SHVIEW_MOVETO
Definition: shresdef.h:837
#define FCIDM_SHVIEW_DELETE
Definition: shresdef.h:829
#define FCIDM_SHVIEW_RENAME
Definition: shresdef.h:851
#define IDS_OBJECTS
Definition: shresdef.h:285
#define FCIDM_TB_REPORTVIEW
Definition: shresdef.h:863
#define FCIDM_SHVIEW_REPORTVIEW
Definition: shresdef.h:844
#define IDA_SHELLVIEW
Definition: shresdef.h:26
#define FCIDM_SHVIEW_INVERTSELECTION
Definition: shresdef.h:839
#define FCIDM_SHVIEW_ARRANGE
Definition: shresdef.h:827
#define FCIDM_SHVIEW_INSERT
Definition: shresdef.h:833
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
@ STRRET_WSTR
Definition: shtypes.idl:85
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
@ SHCOLSTATE_HIDDEN
Definition: shtypes.idl:129
@ SHCOLSTATE_SECONDARYUI
Definition: shtypes.idl:128
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
DWORD SHCOLSTATEF
Definition: shtypes.idl:142
HWND buttons[5]
Definition: sndrec32.cpp:40
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
#define false
Definition: stdbool.h:37
_In_ BOOLEAN Read
Definition: strmini.h:479
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
LPCFOLDERSETTINGS pfs
Definition: shobjidl.idl:800
SHELLVIEWID const * pvid
Definition: shobjidl.idl:803
IShellBrowser * psbOwner
Definition: shobjidl.idl:801
bool bLoadedFromViewState
Definition: CDefView.cpp:63
bool bColumnIsFolderColumn
Definition: CDefView.cpp:64
HMENU & m_hMenu
Definition: CDefView.cpp:135
CComPtr< IContextMenu > & m_pCM
Definition: CDefView.cpp:134
MenuCleanup(CComPtr< IContextMenu > &pCM, HMENU &menu)
Definition: CDefView.cpp:137
FOLDERSETTINGS FolderSettings
Definition: CDefView.cpp:99
static const UINT SIG
Definition: CDefView.cpp:94
static const UINT VALIDFWF
Definition: CDefView.cpp:98
static const UINT SIG
Definition: CDefView.cpp:86
UINT Columns[MAXCOUNT]
Definition: CDefView.cpp:89
BOOL fShowSuperHidden
Definition: shlobj.h:1556
BOOL fShowAllObjects
Definition: shlobj.h:1540
Definition: bl.h:1331
Definition: shlobj.h:1275
FOLDERVIEWMODE fvm
Definition: shlobj.h:1282
IShellView * psvOuter
Definition: shlobj.h:1278
LPFNVIEWCALLBACK pfnCallback
Definition: shlobj.h:1281
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1279
IShellFolder * pshf
Definition: shlobj.h:1277
Definition: dpa.c:49
Definition: scsiwmi.h:51
IShellFolderViewCB * psfvcb
Definition: shlobj.h:1359
IShellView * psvOuter
Definition: shlobj.h:1358
UINT cbSize
Definition: shlobj.h:1356
IShellFolder * pshf
Definition: shlobj.h:1357
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1885
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
Definition: cache.c:49
Definition: name.c:39
Definition: pmap_prot.h:88
Definition: parse.h:23
LVITEMW item
Definition: commctrl.h:3179
LVITEMA item
Definition: commctrl.h:3174
int cchTextMax
Definition: commctrl.h:2349
LPSTR pszText
Definition: commctrl.h:2348
LPWSTR pszText
Definition: commctrl.h:2365
int iSubItem
Definition: commctrl.h:2362
int cchTextMax
Definition: commctrl.h:2366
UINT state
Definition: commctrl.h:2363
UINT mask
Definition: commctrl.h:2360
LPARAM lParam
Definition: commctrl.h:2368
UINT stateMask
Definition: commctrl.h:2364
int iImage
Definition: commctrl.h:2367
ULONG_PTR dwItemData
Definition: winuser.h:3268
LPWSTR dwTypeData
Definition: winuser.h:3269
UINT message
Definition: winuser.h:3115
WPARAM wParam
Definition: winuser.h:3116
UINT code
Definition: winuser.h:3159
UINT uNewState
Definition: commctrl.h:3036
LPARAM lParam
Definition: commctrl.h:3040
UINT uOldState
Definition: commctrl.h:3037
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
HANDLE lEvent
Definition: tftpd.cpp:56
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT_PTR
Definition: typedefs.h:64
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
unsigned char * LPBYTE
Definition: typedefs.h:53
PVOID HANDLE
Definition: typedefs.h:73
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define MAKELONG(a, b)
Definition: typedefs.h:249
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define CWM_GETISHELLBROWSER
Definition: undocshell.h:206
BOOL WINAPI SetShellWindowEx(HWND, HWND)
Definition: ntwrapper.h:58
Definition: pdh_main.c:94
DWORD dwAttributes
Definition: vdmdbg.h:34
#define _T(x)
Definition: vfdio.h:22
view_type
int ret
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
static HMENU hmenu
Definition: win.c:66
#define ZeroMemory
Definition: winbase.h:1712
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3709
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3708
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
DWORD COLORREF
Definition: windef.h:300
void * arg
Definition: msvc.h:10
#define WINAPI
Definition: msvc.h:6
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
#define S_FALSE
Definition: winerror.h:2357
#define DRAGDROP_S_USEDEFAULTCURSORS
Definition: winerror.h:2648
#define DRAGDROP_S_DROP
Definition: winerror.h:2646
#define E_NOINTERFACE
Definition: winerror.h:2364
#define NOERROR
Definition: winerror.h:2354
#define DRAGDROP_S_CANCEL
Definition: winerror.h:2647
#define E_UNEXPECTED
Definition: winerror.h:2456
#define HRESULT_CODE(hr)
Definition: winerror.h:76
#define ERROR_INVALID_DATA
Definition: winerror.h:116
LONG WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *)
Definition: font.c:2145
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define CLR_INVALID
Definition: wingdi.h:883
#define SRCCOPY
Definition: wingdi.h:333
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define GetObject
Definition: wingdi.h:4468
BOOL WINAPI DeleteDC(_In_ HDC)
#define HKEY_CURRENT_USER
Definition: winreg.h:11
HWND WINAPI GetFocus(void)
Definition: window.c:1865
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_ERASEBKGND
Definition: winuser.h:1625
#define MK_RBUTTON
Definition: winuser.h:2368
DWORD WINAPI GetSysColor(_In_ int)
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
UINT WINAPI GetMenuDefaultItem(_In_ HMENU hMenu, _In_ UINT fByPos, _In_ UINT gmdiFlags)
#define MF_BYCOMMAND
Definition: winuser.h:202
#define SB_LINEUP
Definition: winuser.h:564
#define WM_HSCROLL
Definition: winuser.h:1743
#define MIIM_ID
Definition: winuser.h:722
#define COLOR_WINDOW
Definition: winuser.h:918
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define SPI_SETDESKWALLPAPER
Definition: winuser.h:1369
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define COLOR_WINDOWTEXT
Definition: winuser.h:921
#define WM_VSCROLL
Definition: winuser.h:1744
#define TPM_RIGHTBUTTON
Definition: winuser.h:2380
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1608
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define WM_SIZE
Definition: winuser.h:1611
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define SB_VERT
Definition: winuser.h:553
HMENU WINAPI CreateMenu(void)
Definition: menu.c:829
#define SWP_NOMOVE
Definition: winuser.h:1244
#define WM_COMMAND
Definition: winuser.h:1740
#define MF_STRING
Definition: winuser.h:138
#define IDC_ARROW
Definition: winuser.h:687
#define WM_KEYFIRST
Definition: winuser.h:1714
#define VK_CONTROL
Definition: winuser.h:2203
#define MFS_DISABLED
Definition: winuser.h:749
#define WM_SETFOCUS
Definition: winuser.h:1613
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MF_CHECKED
Definition: winuser.h:132
#define SWP_NOSIZE
Definition: winuser.h:1245
UINT WINAPI GetMenuItemID(_In_ HMENU, _In_ int)
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1626
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
#define WM_GETFONT
Definition: winuser.h:1651
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define MF_UNCHECKED
Definition: winuser.h:204
#define TPM_TOPALIGN
Definition: winuser.h:2383
#define WM_DRAWITEM
Definition: winuser.h:1645
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_NCCREATE
Definition: winuser.h:1683
#define MIIM_STATE
Definition: winuser.h:721
#define WM_ACTIVATE
Definition: winuser.h:1612
#define WM_SHOWWINDOW
Definition: winuser.h:1628
#define WM_SETTINGCHANGE
Definition: winuser.h:1629
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define HWND_TOP
Definition: winuser.h:1207
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MIIM_SUBMENU
Definition: winuser.h:723
#define WM_INITMENUPOPUP
Definition: winuser.h:1746
#define MF_ENABLED
Definition: winuser.h:128
#define MF_SEPARATOR
Definition: winuser.h:137
#define EM_SETLIMITTEXT
Definition: winuser.h:2011
#define COLOR_DESKTOP
Definition: winuser.h:914
#define TPM_LEFTALIGN
Definition: winuser.h:2377
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
struct tagNMHDR * LPNMHDR
#define HTCLIENT
Definition: winuser.h:2475
#define SWP_SHOWWINDOW
Definition: winuser.h:1248
#define SendMessage
Definition: winuser.h:5852
#define LoadCursor
Definition: winuser.h:5821
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5728
#define MFS_CHECKED
Definition: winuser.h:747
HDC WINAPI GetDC(_In_opt_ HWND)
#define SB_LINEDOWN
Definition: winuser.h:565
#define EM_SETSEL
Definition: winuser.h:2018
#define TPM_LEFTBUTTON
Definition: winuser.h:2379
#define WM_MEASUREITEM
Definition: winuser.h:1646
#define PostMessage
Definition: winuser.h:5841
BOOL WINAPI CheckMenuRadioItem(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT, _In_ UINT)
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI DestroyMenu(_In_ HMENU)
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define WM_SETCURSOR
Definition: winuser.h:1636
#define MK_LBUTTON
Definition: winuser.h:2367
#define VK_SHIFT
Definition: winuser.h:2202
#define SW_SHOW
Definition: winuser.h:775
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define WM_DESTROY
Definition: winuser.h:1609
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
int WINAPI GetScrollPos(_In_ HWND, _In_ int)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2906
#define TPM_RETURNCMD
Definition: winuser.h:2387
#define GWL_STYLE
Definition: winuser.h:852
#define CS_PARENTDC
Definition: winuser.h:656
#define TranslateAccelerator
Definition: winuser.h:5869
#define WM_KEYLAST
Definition: winuser.h:1728
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_KILLFOCUS
Definition: winuser.h:1614
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2119
#define MIIM_DATA
Definition: winuser.h:726
#define MIIM_TYPE
Definition: winuser.h:725
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define WM_GETDLGCODE
Definition: winuser.h:1689
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI InsertMenuItemW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
#define SB_HORZ
Definition: winuser.h:552
SHORT WINAPI GetKeyState(_In_ int)
#define MF_GRAYED
Definition: winuser.h:129
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define MF_DISABLED
Definition: winuser.h:130
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
#define IID_NULL_PPV_ARG(Itype, ppType)
static int insert
Definition: xmllint.c:138
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
char CHAR
Definition: xmlstorage.h:175