ReactOS 0.4.16-dev-2206-gc56950d
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
52
54 // FIXME: FCIDM_SHVIEWFIRST is 0 and using that with QueryContextMenu is a
55 // bad idea because it hides bugs related to the ids in ici.lpVerb.
56 // CONTEXT_MENU_BASE_ID acknowledges this but failed to apply the fix everywhere.
58};
59#undef FCIDM_SHVIEWLAST // Don't use this constant, change DVIDM_CONTEXTMENU_LAST if you need a new id.
60
62{
66 UINT8 Reserved; // Unused
68 INT FolderColumn; // Only valid during a sorting operation
69
70 enum { UNSPECIFIEDCOLUMN = -1 };
71 void Reset()
72 {
73 *(UINT*)this = 0;
75 }
76};
77
78// For the context menu of the def view, the id of the items are based on 1 because we need
79// to call TrackPopupMenu and let it use the 0 value as an indication that the menu was canceled
80#define CONTEXT_MENU_BASE_ID 1
81
83{
84 enum { MAXCOUNT = 100 };
85 static const UINT SIG = ('R' << 0) | ('O' << 8) | ('S' << 16) | (('c') << 24);
89};
90
92{
93 static const UINT SIG = ('R' << 0) | ('O' << 8) | ('S' << 16) | (('c' ^ 'v' ^ 's') << 24);
97 static const UINT VALIDFWF = FWF_AUTOARRANGE | FWF_SNAPTOGRID | FWF_NOGROUPING; // Note: The desktop applies FWF_NOICONS when appropriate
99};
100
101static UINT
103{
104 UINT cmf = CMF_NORMAL;
105 if (GetKeyState(VK_SHIFT) < 0)
106 cmf |= CMF_EXTENDEDVERBS;
107 if (sfgao & SFGAO_CANRENAME)
108 cmf |= CMF_CANRENAME;
109 HWND hwnd = NULL;
110 if (pSB && SUCCEEDED(pSB->GetControlWindow(FCW_TREE, &hwnd)) && hwnd)
111 cmf |= CMF_EXPLORE;
112 return cmf;
113}
114
115// Convert client coordinates to listview coordinates
116static void
118{
119 POINT Origin = {};
120
121 // FIXME: LVM_GETORIGIN is broken. See CORE-17266
122 if (!ListView_GetOrigin(hwndLV, &Origin))
123 return;
124
125 ppt->x += Origin.x;
126 ppt->y += Origin.y;
127}
128
129// Helper struct to automatically cleanup the IContextMenu
130// We want to explicitly reset the Site, so there are no circular references
132{
135
137 : m_pCM(pCM), m_hMenu(menu)
138 {
139 }
141 {
142 if (m_pCM)
143 {
145 m_pCM.Release();
146 }
147 if (m_hMenu)
148 {
150 m_hMenu = NULL;
151 }
152 }
153};
154
156{
157 MENUITEMINFOW mii;
158 mii.cbSize = sizeof(mii);
160 mii.fState = MF & (MFS_CHECKED | MFS_DISABLED);
161 mii.fType = MF & ~mii.fState;
162 mii.wID = Id;
163 mii.dwTypeData = const_cast<LPWSTR>(String);
164 mii.dwItemData = Data;
165 return InsertMenuItemW(hMenu, -1, TRUE, &mii);
166}
167
169{
170 MENUITEMINFOW mii;
171 mii.cbSize = FIELD_OFFSET(MENUITEMINFOW, hbmpItem);
172 mii.fMask = MIIM_DATA;
173 if (GetMenuItemInfoW(hMenu, Id, FALSE, &mii))
174 return mii.dwItemData;
175 else
176 return 0;
177}
178
180{
181 MENUITEMINFOW mii = {sizeof(mii), MIIM_SUBMENU};
182 if (::GetMenuItemInfoW(hmenu, id, FALSE, &mii))
183 return mii.hSubMenu;
184
185 return NULL;
186}
187
188/* ReallyGetMenuItemID returns the id of an item even if it opens a submenu,
189 GetMenuItemID returns -1 if the specified item opens a submenu */
191{
192 MENUITEMINFOW mii = {sizeof(mii), MIIM_ID};
193 if (::GetMenuItemInfoW(hmenu, i, TRUE, &mii))
194 return mii.wID;
195
196 return UINT_MAX;
197}
198
200{
201 UINT ret = 0;
202 HDC hDC = GetDC(hwnd);
203 if (hDC)
204 {
207 SelectObject(hDC, hOrg);
209 }
210 return ret;
211}
212
213static inline COLORREF GetViewColor(COLORREF Clr, UINT SysFallback)
214{
215 return Clr != CLR_INVALID ? Clr : GetSysColor(SysFallback);
216}
217
218#define VID_Default ( *(const SHELLVIEWID*)&IID_CDefView )
219extern HRESULT ShellViewIdToFolderViewMode(const SHELLVIEWID *pVid);
220extern const SHELLVIEWID* FolderViewModeToShellViewId(UINT FVM);
221
222class CDefView :
223 public CWindowImpl<CDefView, CWindow, CControlWinTraits>,
224 public CComObjectRootEx<CComMultiThreadModelNoCS>,
225 public IShellView3,
226 public IFolderView,
227 public IShellFolderView,
228 public IOleCommandTarget,
229 public IDropTarget,
230 public IDropSource,
231 public IViewObject,
232 public IServiceProvider
233{
234private:
243 ClipboardViewerChain m_ClipboardChain;
247 HMENU m_hMenu; // Handle to the menu bar of the browser
248 HMENU m_hMenuArrangeModes; // Handle to the popup menu with the arrange modes
249 HMENU m_hMenuViewModes; // Handle to the popup menu with the view modes
250 HMENU m_hContextMenu; // Handle to the open context menu
259 ULONG m_hNotify; // Change notification handle
260 HACCEL m_hAccel;
264 // for drag and drop
266 CComPtr<IDropTarget> m_pCurDropTarget; // The sub-item, which is currently dragged over
267 CComPtr<IDataObject> m_pCurDataObject; // The dragged data-object
268 LONG m_iDragOverItem; // Dragged over item's index, if m_pCurDropTarget != NULL
269 UINT m_cScrollDelay; // Send a WM_*SCROLL msg every 250 ms during drag-scroll
270 POINT m_ptLastMousePos; // Mouse position at last DragOver call
271 POINT m_ptFirstMousePos; // Mouse position when the drag operation started
273 //
276
278 signed char m_SpecialFolder;
282
286
288
290 BOOL _Sort(int Col = -1);
297 void _DoCopyToMoveToFolder(BOOL bCopy);
299
300 inline BOOL IsSpecialFolder(int &csidl) const
301 {
302 csidl = m_SpecialFolder;
303 return m_SpecialFolder >= 0;
304 }
305
306public:
307 CDefView();
308 ~CDefView();
313 void UpdateStatusbar();
315 void CheckToolbar();
317 void UpdateListColors();
318 BOOL InitList();
319 static INT CALLBACK ListViewCompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData);
320
325 HRESULT LoadColumn(UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth = 0);
326 HRESULT LoadColumns(SIZE_T *pColList = NULL, UINT ColListCount = 0);
327 void ColumnListChanged();
330 void RefreshGhostedState();
334 int LV_AddItem(PCUITEMID_CHILD pidl);
339 void LV_RefreshIcon(INT iItem);
340 void LV_RefreshIcons();
342 HRESULT FillList(BOOL IsRefreshCommand = TRUE);
346 HRESULT FillArrangeAsMenu(HMENU hmenuArrange);
347 HRESULT CheckViewMode(HMENU hmenuView);
349 HRESULT SelectAndPositionItem(int Idx, UINT fSVSI, POINT *ppt);
353 void OnDeactivate();
354 void DoActivate(UINT uState);
355 HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
356 HRESULT InvokeContextMenuCommand(CComPtr<IContextMenu>& pCM, LPCSTR lpVerb, POINT* pt = NULL, bool TryMapVerb = false);
357 LRESULT OnExplorerCommand(UINT uCommand, BOOL bUseSelection);
359 HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream);
361 HRESULT SaveViewState(IStream *pStream);
364
366 {
369 {
370 DWORD flags;
371 if (SUCCEEDED(pcdb2->GetViewFlags(&flags)))
372 return flags;
373 }
374 return 0;
375 }
376
377 static inline bool IsSupportedFolderViewMode(int Mode)
378 {
379 return Mode >= FVM_FIRST && Mode <= FVM_DETAILS; // We don't support Tile nor Thumbstrip
380 }
381
382 // *** IOleWindow methods ***
383 STDMETHOD(GetWindow)(HWND *lphwnd) override;
384 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override;
385
386 // *** IShellView methods ***
387 STDMETHOD(TranslateAccelerator)(MSG *pmsg) override;
388 STDMETHOD(EnableModeless)(BOOL fEnable) override;
389 STDMETHOD(UIActivate)(UINT uState) override;
390 STDMETHOD(Refresh)() override;
391 STDMETHOD(CreateViewWindow)(IShellView *psvPrevious, LPCFOLDERSETTINGS pfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd) override;
392 STDMETHOD(DestroyViewWindow)() override;
395 STDMETHOD(SaveViewState)() override;
396 STDMETHOD(SelectItem)(PCUITEMID_CHILD pidlItem, SVSIF uFlags) override;
397 STDMETHOD(GetItemObject)(UINT uItem, REFIID riid, void **ppv) override;
398
399 // *** IShellView2 methods ***
400 STDMETHOD(GetView)(SHELLVIEWID *pVid, ULONG view_type) override;
401 STDMETHOD(CreateViewWindow2)(LPSV2CVW2_PARAMS view_params) override;
402 STDMETHOD(HandleRename)(LPCITEMIDLIST pidl) override;
404
405 // *** IShellView3 methods ***
407 IShellBrowser *psb,
408 IShellView *psvPrevious,
409 SV3CVW3_FLAGS view_flags,
413 const SHELLVIEWID *view_id,
414 const RECT *prcView,
415 HWND *hwnd) override;
416
417 // *** IFolderView methods ***
418 STDMETHOD(GetCurrentViewMode)(UINT *pViewMode) override;
419 STDMETHOD(SetCurrentViewMode)(UINT ViewMode) override;
420 STDMETHOD(GetFolder)(REFIID riid, void **ppv) override;
421 STDMETHOD(Item)(int iItemIndex, PITEMID_CHILD *ppidl) override;
422 STDMETHOD(ItemCount)(UINT uFlags, int *pcItems) override;
423 STDMETHOD(Items)(UINT uFlags, REFIID riid, void **ppv) override;
424 STDMETHOD(GetSelectionMarkedItem)(int *piItem) override;
425 STDMETHOD(GetFocusedItem)(int *piItem) override;
426 STDMETHOD(GetItemPosition)(PCUITEMID_CHILD pidl, POINT *ppt) override;
427 STDMETHOD(GetSpacing)(POINT *ppt) override;
428 STDMETHOD(GetDefaultSpacing)(POINT *ppt) override;
429 STDMETHOD(GetAutoArrange)() override;
430 STDMETHOD(SelectItem)(int iItem, DWORD dwFlags) override;
432
433 // *** IShellFolderView methods ***
434 STDMETHOD(Rearrange)(LPARAM sort) override;
436 STDMETHOD(ArrangeGrid)() override;
437 STDMETHOD(AutoArrange)() override;
438 STDMETHOD(AddObject)(PITEMID_CHILD pidl, UINT *item) override;
439 STDMETHOD(GetObject)(PITEMID_CHILD *pidl, UINT item) override;
440 STDMETHOD(RemoveObject)(PITEMID_CHILD pidl, UINT *item) override;
443 STDMETHOD(UpdateObject)(PITEMID_CHILD pidl_old, PITEMID_CHILD pidl_new, UINT *item) override;
445 STDMETHOD(SetRedraw)(BOOL redraw) override;
448 STDMETHOD(IsDropOnSource)(IDropTarget *drop_target) override;
449 STDMETHOD(GetDragPoint)(POINT *pt) override;
450 STDMETHOD(GetDropPoint)(POINT *pt) override;
452 STDMETHOD(SetItemPos)(PCUITEMID_CHILD pidl, POINT *pt) override;
453 STDMETHOD(IsBkDropTarget)(IDropTarget *drop_target) override;
454 STDMETHOD(SetClipboard)(BOOL move) override;
456 STDMETHOD(GetItemSpacing)(ITEMSPACING *spacing) override;
457 STDMETHOD(SetCallback)(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb) override;
458 STDMETHOD(Select)(UINT flags) override;
459 STDMETHOD(QuerySupport)(UINT *support) override;
460 STDMETHOD(SetAutomationObject)(IDispatch *disp) override;
461
462 // *** IOleCommandTarget methods ***
463 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override;
464 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override;
465
466 // *** IDropTarget methods ***
467 STDMETHOD(DragEnter)(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
468 STDMETHOD(DragOver)(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
469 STDMETHOD(DragLeave)() override;
470 STDMETHOD(Drop)(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
471
472 // *** IDropSource methods ***
473 STDMETHOD(QueryContinueDrag)(BOOL fEscapePressed, DWORD grfKeyState) override;
474 STDMETHOD(GiveFeedback)(DWORD dwEffect) override;
475
476 // *** IViewObject methods ***
477 STDMETHOD(Draw)(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd,
478 HDC hdcTargetDev, HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds,
479 BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue) override;
480 STDMETHOD(GetColorSet)(DWORD dwDrawAspect, LONG lindex, void *pvAspect,
481 DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet) override;
482 STDMETHOD(Freeze)(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) override;
483 STDMETHOD(Unfreeze)(DWORD dwFreeze) override;
484 STDMETHOD(SetAdvise)(DWORD aspects, DWORD advf, IAdviseSink *pAdvSink) override;
485 STDMETHOD(GetAdvise)(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) override;
486
487 // *** IServiceProvider methods ***
488 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override;
489
490 // Message handlers
493 LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
499 LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
501 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
505 LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
506 LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
514
515 virtual VOID OnFinalMessage(HWND) override;
516
518 {
519 static ATL::CWndClassInfo wc =
520 {
522 0, 0, NULL, NULL,
523 LoadCursor(NULL, IDC_ARROW), NULL, NULL, L"SHELLDLL_DefView", NULL
524 },
525 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
526 };
527 return wc;
528 }
529
530 virtual WNDPROC GetWindowProc() override
531 {
532 return WindowProc;
533 }
534
536 {
537 CDefView *pThis;
539
540 // Must hold a reference during message handling
541 pThis = reinterpret_cast<CDefView *>(hWnd);
542 pThis->AddRef();
544 pThis->Release();
545 return result;
546 }
547
574
576 // Windows returns E_NOINTERFACE for IOleWindow
577 // COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
578 COM_INTERFACE_ENTRY_IID(IID_IShellView, IShellView)
580 COM_INTERFACE_ENTRY_IID(IID_IShellView2, IShellView2)
581 COM_INTERFACE_ENTRY_IID(IID_IShellView3, IShellView3)
582 COM_INTERFACE_ENTRY_IID(IID_IFolderView, IFolderView)
583 COM_INTERFACE_ENTRY_IID(IID_IShellFolderView, IShellFolderView)
584 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
585 COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget)
586 COM_INTERFACE_ENTRY_IID(IID_IDropSource, IDropSource)
588 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
590};
591
592#define ID_LISTVIEW 1
593
594// windowsx.h
595#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp)
596#define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp)
597#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp)
598
600
602 m_ListView(),
604 m_hMenu(NULL),
609 m_uState(0),
610 m_cidl(0),
611 m_apidl(NULL),
614 m_hNotify(0),
615 m_hAccel(NULL),
616 m_dwAspects(0),
617 m_dwAdvf(0),
621 m_SpecialFolder(-1),
626{
633
637}
638
640{
641 TRACE(" destroying IShellView(%p)\n", this);
642
644
646 {
649 }
650
651 if (m_hWnd)
652 {
654 }
655
659}
660
662{
663 m_pSFParent = shellFolder;
665 shellFolder->QueryInterface(IID_PPV_ARG(IShellDetails, &m_pSDParent));
666
667 return S_OK;
668}
669
670// ##### helperfunctions for communication with ICommDlgBrowser #####
671
673{
674 HRESULT ret = S_OK;
675 if (m_pCommDlgBrowser && !(GetCommDlgViewFlags() & CDB2GVF_NOINCLUDEITEM))
676 {
677 TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl);
678 ret = m_pCommDlgBrowser->IncludeObject(this, pidl);
679 TRACE("-- returns 0x%08x\n", ret);
680 }
681 else if (m_pFolderFilter)
682 {
683 ret = m_pFolderFilter->ShouldShow(m_pSFParent, m_pidlParent, pidl);
684 }
685 return ret;
686}
687
689{
691
692 if (m_pCommDlgBrowser.p != NULL)
693 {
694 TRACE("ICommDlgBrowser::OnDefaultCommand\n");
695 ret = m_pCommDlgBrowser->OnDefaultCommand(this);
696 TRACE("-- returns 0x%08x\n", ret);
697 }
698
699 return ret;
700}
701
703{
705
706 if (m_pCommDlgBrowser.p != NULL)
707 {
708 TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags);
709 ret = m_pCommDlgBrowser->OnStateChange(this, uFlags);
710 TRACE("--\n");
711 }
712
713 return ret;
714}
715/**********************************************************
716 * set the toolbar of the filedialog buttons
717 *
718 * - activates the buttons from the shellbrowser according to
719 * the view state
720 */
722{
724
725 TRACE("\n");
726
727 if (m_pCommDlgBrowser != NULL)
728 {
729 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
731 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_CHECKBUTTON,
733 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
735 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON,
737 }
738}
739
741{
742 WCHAR szFormat[MAX_PATH];
743 WCHAR szPartText[MAX_PATH];
744 UINT cSelectedItems;
745
746 if (!m_ListView)
747 return;
748
749 cSelectedItems = m_ListView.GetSelectedCount();
750 if (cSelectedItems)
751 {
753 StringCchPrintfW(szPartText, _countof(szPartText), szFormat, cSelectedItems);
754 }
755 else
756 {
757 LoadStringW(shell32_hInstance, IDS_OBJECTS, szFormat, _countof(szFormat));
758 StringCchPrintfW(szPartText, _countof(szPartText), szFormat, m_ListView.GetItemCount());
759 }
760
761 LRESULT lResult;
762 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 0, (LPARAM)szPartText, &lResult);
763
764 // Don't bother with the extra processing if we only have one StatusBar part
766 {
767 UINT64 uTotalFileSize = 0;
768 WORD uFileFlags = LVNI_ALL;
769 INT nItem = -1;
770 bool bIsOnlyFoldersSelected = true;
771
772 // If we have something selected then only count selected file sizes
773 if (cSelectedItems)
774 {
775 uFileFlags = LVNI_SELECTED;
776 }
777
778 while ((nItem = m_ListView.GetNextItem(nItem, uFileFlags)) >= 0)
779 {
780 PCUITEMID_CHILD pidl = _PidlByItem(nItem);
781
782 uTotalFileSize += _ILGetFileSize(pidl, NULL, 0);
783
784 if (!_ILIsFolder(pidl))
785 {
786 bIsOnlyFoldersSelected = false;
787 }
788 }
789
790 // Don't show the file size text if there is 0 bytes in the folder
791 // OR we only have folders selected
792 if ((cSelectedItems && !bIsOnlyFoldersSelected) || uTotalFileSize)
793 StrFormatByteSizeW(uTotalFileSize, szPartText, _countof(szPartText));
794 else
795 *szPartText = 0;
796
797 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 1, (LPARAM)szPartText, &lResult);
798 }
799
800 SFGAOF att = 0;
801 if (cSelectedItems > 0)
802 {
803 UINT maxquery = 42; // Checking the attributes can be slow, only check small selections (_DoCopyToMoveToFolder will verify the full array)
804 att = SFGAO_CANCOPY | SFGAO_CANMOVE;
805 if (cSelectedItems <= maxquery && (!GetSelections() || FAILED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &att))))
806 att = 0;
807 }
808 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, FCIDM_SHVIEW_COPYTO, (att & SFGAO_CANCOPY) != 0, &lResult);
809 m_pShellBrowser->SendControlMsg(FCW_TOOLBAR, TB_ENABLEBUTTON, FCIDM_SHVIEW_MOVETO, (att & SFGAO_CANMOVE) != 0, &lResult);
810}
811
813{
814 LRESULT lResult;
815 LPARAM pIcon = NULL;
816 WCHAR szPartText[MAX_PATH];
817 *szPartText = 0;
819 {
820 // If we are in a Recycle Bin then show no text for the location part
821 int csidl;
822 if (!IsSpecialFolder(csidl) || (csidl != CSIDL_NETWORK && csidl != CSIDL_BITBUCKET))
823 {
824 LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szPartText, _countof(szPartText));
825 pIcon = (LPARAM)m_hMyComputerIcon;
826 }
827 /*else if (csidl == CSIDL_NETWORK) // TODO: Figure out the type of share (My Computer/Local Intranet/Internet?)
828 {
829 ImageList_GetIconSize(ListView_GetImageList(m_ListView, LVSIL_SMALL), &x, &y);
830 pIcon = (LPARAM)LoadImage(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_MY_NETWORK_PLACES),
831 IMAGE_ICON, x, y, LR_SHARED);
832 }*/
833 }
834 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETICON, 2, pIcon, &lResult);
835 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETTEXT, 2, (LPARAM)szPartText, &lResult);
836}
837
839{
842 return 0;
843}
844
845
846// ##### helperfunctions for initializing the view #####
847
848// creates the list view window
850{
851 DWORD dwStyle, dwExStyle, ListExStyle;
852 TRACE("%p\n", this);
853
855 LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_AUTOARRANGE; // FIXME: Remove LVS_AUTOARRANGE when the view is able to save ItemPos
857 ListExStyle = LVS_EX_INFOTIP | LVS_EX_LABELTIP;
858
860 {
862 dwStyle |= LVS_ALIGNLEFT;
863 // LVS_EX_REGIONAL?
864 }
865 else
866 {
867 dwStyle |= LVS_SHOWSELALWAYS; // MSDN says FWF_SHOWSELALWAYS is deprecated, always turn on for folders
869#if 0 // FIXME: Temporarily disabled until ListView is fixed (CORE-19624, CORE-19818)
870 ListExStyle |= LVS_EX_DOUBLEBUFFER;
871#endif
872 }
873
875 {
876 case FVM_ICON:
877 dwStyle |= LVS_ICON;
878 break;
879 case FVM_DETAILS:
880 dwStyle |= LVS_REPORT;
881 break;
882 case FVM_SMALLICON:
883 dwStyle |= LVS_SMALLICON;
884 break;
885 case FVM_LIST:
886 dwStyle |= LVS_LIST;
887 break;
888 default:
889 dwStyle |= LVS_LIST;
890 break;
891 }
892
894 dwStyle |= LVS_AUTOARRANGE;
895
897 ListExStyle |= LVS_EX_SNAPTOGRID;
898
900 dwStyle |= LVS_SINGLESEL;
901
903 ListExStyle |= LVS_EX_FULLROWSELECT;
904
905 ListExStyle |= GetItemActivateFlags();
906 if (ListExStyle & LVS_EX_ONECLICKACTIVATE)
907 ListExStyle |= SHELL_GetIconUnderlineFlags();
908
910 dwStyle |= LVS_NOCOLUMNHEADER;
911
912#if 0
913 // FIXME: Because this is a negative, everyone gets the new flag by default unless they
914 // opt out. This code should be enabled when shell looks like Vista instead of 2003
916 ListExStyle |= LVS_EX_HEADERINALLVIEWS;
917#endif
918
920 dwExStyle &= ~WS_EX_CLIENTEDGE;
921
922 RECT rcListView = {0,0,0,0};
923 m_ListView.Create(m_hWnd, rcListView, L"FolderView", dwStyle, dwExStyle, ID_LISTVIEW);
924
925 if (!m_ListView)
926 return FALSE;
927
929
930 /* UpdateShellSettings(); */
931 return TRUE;
932}
933
935{
937 {
938 /* Check if drop shadows option is enabled */
939 BOOL bDropShadow = FALSE;
940 DWORD cbDropShadow = sizeof(bDropShadow);
941
942 /*
943 * The desktop ListView always take the default desktop colours, by
944 * remaining transparent and letting user32/win32k paint itself the
945 * desktop background color, if any.
946 */
948
949 SHGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
950 L"ListviewShadow", NULL, &bDropShadow, &cbDropShadow);
951 if (bDropShadow)
952 {
953 /* Set the icon background transparent */
955 m_ListView.SetTextColor(RGB(255, 255, 255));
956 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTSHADOWTEXT, LVS_EX_TRANSPARENTSHADOWTEXT);
957 }
958 else
959 {
960 /* Set the icon background as the same colour as the desktop */
962 m_ListView.SetTextBkColor(crDesktop);
963 if (GetRValue(crDesktop) + GetGValue(crDesktop) + GetBValue(crDesktop) > 128 * 3)
964 m_ListView.SetTextColor(RGB(0, 0, 0));
965 else
966 m_ListView.SetTextColor(RGB(255, 255, 255));
967 m_ListView.SetExtendedListViewStyle(0, LVS_EX_TRANSPARENTSHADOWTEXT);
968 }
969 }
970 else
971 {
974
975 // Background is painted by the parent via WM_PRINTCLIENT
976 m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTBKGND, LVS_EX_TRANSPARENTBKGND);
977 }
978}
979
980// adds all needed columns to the shellview
982{
983 HIMAGELIST big_icons, small_icons;
984
985 TRACE("%p\n", this);
986
988
989 Shell_GetImageLists(&big_icons, &small_icons);
991 m_ListView.SetImageList(small_icons, LVSIL_SMALL);
992
994
996 UINT ColumnCount = pColumns ? DPA_GetPtrCount(m_LoadColumnsList) : 0;
997 LoadColumns(pColumns, ColumnCount);
999 {
1003 }
1004 return TRUE;
1005}
1006
1007/**********************************************************
1008* Column handling
1009*/
1011{
1012 LVCOLUMN lvc;
1013 lvc.mask = LVCF_SUBITEM;
1014 if (!ListView_GetColumn(List, Col, &lvc))
1015 return E_FAIL;
1016 else
1017 return lvc.iSubItem;
1018}
1019
1021{
1022 // This function is only called during column management, performance is not critical.
1023 for (UINT i = 0;; ++i)
1024 {
1026 if ((UINT)r == FoldCol)
1027 return i;
1028 else if (FAILED(r))
1029 return r;
1030 }
1031}
1032
1034{
1035 // This function is called every time a LVITEM::iSubItem is mapped to
1036 // a folder column (calls to GetDetailsOf etc.) and should be fast.
1038 {
1040 if (ListCol < count)
1041 {
1043 assert(col >= 0 && col == SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol));
1044 return col;
1045 }
1046 else if (count)
1047 {
1048 TRACE("m_ListToFolderColMap cache miss while mapping %d\n", ListCol);
1049 }
1050 }
1051 return SHGetLVColumnSubItem(m_ListView.m_hWnd, ListCol);
1052}
1053
1055{
1056 // According to learn.microsoft.com/en-us/windows/win32/shell/sfvm-getdetailsof
1057 // the query order is IShellFolder2, IShellDetails, SFVM_GETDETAILSOF.
1058 HRESULT hr = E_FAIL;
1059 if (m_pSF2Parent)
1060 {
1061 hr = m_pSF2Parent->GetDetailsOf(pidl, FoldCol, &sd);
1062 }
1063 if (FAILED(hr) && m_pSDParent)
1064 {
1065 hr = m_pSDParent->GetDetailsOf(pidl, FoldCol, &sd);
1066 }
1067#if 0 // TODO
1068 if (FAILED(hr))
1069 {
1070 FIXME("Try SFVM_GETDETAILSOF\n");
1071 }
1072#endif
1073 return hr;
1074}
1075
1077{
1079 if (SUCCEEDED(hr))
1080 return GetDetailsByFolderColumn(pidl, hr, sd);
1081 ERR("Unable to determine folder column from list column %d\n", (int) ListCol);
1082 return hr;
1083}
1084
1085HRESULT CDefView::LoadColumn(UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth)
1086{
1089 HRESULT hr;
1090
1091 sd.str.uType = !STRRET_WSTR; // Make sure "uninitialized" uType is not WSTR
1092 hr = GetDetailsByFolderColumn(NULL, FoldCol, sd);
1093 if (FAILED(hr))
1094 return hr;
1095 hr = StrRetToStrNW(buf, _countof(buf), &sd.str, NULL);
1096 if (FAILED(hr))
1097 return hr;
1098
1099 UINT chavewidth = CalculateCharWidth(m_ListView.m_hWnd);
1100 if (!chavewidth)
1101 chavewidth = 6; // 6 is a reasonable default fallback
1102
1103 LVCOLUMN lvc;
1104 lvc.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM;
1105 lvc.pszText = buf;
1106 lvc.fmt = sd.fmt;
1107 lvc.cx = ForceWidth ? ForceWidth : (sd.cxChar * chavewidth); // FIXME: DPI?
1108 lvc.iSubItem = FoldCol; // Used by MapFolderColumnToListColumn & MapListColumnToFolderColumn
1109 if ((int)ListCol == -1)
1110 {
1111 assert(Insert); // You can insert at the end but you can't change something that is not there
1112 if (Insert)
1113 ListCol = 0x7fffffff;
1114 }
1115 if (Insert)
1116 ListView_InsertColumn(m_ListView.m_hWnd, ListCol, &lvc);
1117 else
1118 ListView_SetColumn(m_ListView.m_hWnd, ListCol, &lvc);
1119 return S_OK;
1120}
1121
1123{
1124 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
1125 UINT newColCount = 0, oldColCount = Header_GetItemCount(hWndHdr);
1126 UINT width = 0, foldCol, i;
1127 HRESULT hr = S_FALSE;
1128
1130 for (i = 0, foldCol = 0;; ++foldCol)
1131 {
1132 if (newColCount >= 0xffff)
1133 break; // CompareIDs limit reached
1134
1135 if (pColList)
1136 {
1137 if (i >= ColListCount)
1138 break;
1139 width = HIWORD(pColList[i]);
1140 foldCol = LOWORD(pColList[i++]);
1141 }
1142
1143 SHCOLSTATEF state = 0;
1144 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
1146
1147 if (foldCol == 0)
1148 {
1149 // Force the first column
1150 }
1151 else if (state & SHCOLSTATE_HIDDEN)
1152 {
1153 continue;
1154 }
1155 else if (!pColList && !(state & SHCOLSTATE_ONBYDEFAULT))
1156 {
1157 continue;
1158 }
1159
1160 bool insert = newColCount >= oldColCount;
1161 UINT listCol = insert ? -1 : newColCount;
1162 hr = LoadColumn(foldCol, listCol, insert, width);
1163 if (FAILED(hr))
1164 {
1165 if (!pColList)
1166 hr = S_OK; // No more items, we are done
1167 break;
1168 }
1169 ++newColCount;
1170 }
1171 for (i = newColCount; i < oldColCount; ++i)
1172 {
1174 }
1175
1178 assert(SUCCEEDED(MapFolderColumnToListColumn(0))); // We don't allow turning off the Name column
1180 {
1183 }
1184 return hr;
1185}
1186
1188{
1190 m_ListToFolderColMap = NULL; // No cache while we are building the cache
1192 for (UINT i = 0;; ++i)
1193 {
1195 if (FAILED(hr))
1196 break; // No more columns
1197 if (!DPA_SetPtr(cache, i, (void*)(INT_PTR) hr))
1198 break; // Cannot allow holes in the cache, must stop now.
1199 }
1201
1202 for (;;)
1203 {
1205 break;
1206 }
1208 if (hMenu)
1209 {
1210 hMenu = GetSubmenuByID(hMenu, FCIDM_SHVIEW_ARRANGE);
1211 for (UINT i = DVIDM_ARRANGESORT_FIRST; i <= DVIDM_ARRANGESORT_LAST && hMenu; ++i)
1212 {
1213 RemoveMenu(hMenu, i, MF_BYCOMMAND);
1214 }
1215 if ((int) GetMenuItemID(hMenu, 0) <= 0)
1216 RemoveMenu(hMenu, 0, MF_BYPOSITION); // Separator
1217 }
1219 LVCOLUMN lvc;
1220 lvc.mask = LVCF_TEXT;
1221 lvc.pszText = buf;
1222 lvc.cchTextMax = _countof(buf);
1223 for (UINT listCol = 0; listCol < DEFVIEW_ARRANGESORT_MAXENUM; ++listCol)
1224 {
1225 if (!ListView_GetColumn(m_ListView.m_hWnd, listCol, &lvc))
1226 break;
1227 HRESULT foldCol = MapListColumnToFolderColumn(listCol);
1228 assert(SUCCEEDED(foldCol));
1231 DVIDM_ARRANGESORT_FIRST + listCol, lvc.pszText, listCol);
1232 }
1233
1234 ListView_RedrawItems(m_ListView.m_hWnd, 0, 0x7fffffff);
1235 m_ListView.InvalidateRect(NULL, TRUE);
1236}
1237
1238/*************************************************************************
1239 * ShellView_ListViewCompareItems
1240 *
1241 * Compare Function for the Listview (FileOpen Dialog)
1242 *
1243 * PARAMS
1244 * lParam1 [I] the first ItemIdList to compare with
1245 * lParam2 [I] the second ItemIdList to compare with
1246 * lpData [I] The column ID for the header Ctrl to process
1247 *
1248 * RETURNS
1249 * A negative value if the first item should precede the second,
1250 * a positive value if the first item should follow the second,
1251 * or zero if the two items are equivalent
1252 */
1254{
1255 PCUIDLIST_RELATIVE pidl1 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam1);
1256 PCUIDLIST_RELATIVE pidl2 = reinterpret_cast<PCUIDLIST_RELATIVE>(lParam2);
1257 CDefView *pThis = reinterpret_cast<CDefView*>(lpData);
1258
1259 HRESULT hres = pThis->m_pSFParent->CompareIDs(pThis->m_sortInfo.FolderColumn, pidl1, pidl2);
1261 return 0;
1262
1263 SHORT nDiff = HRESULT_CODE(hres);
1264 return nDiff * pThis->m_sortInfo.Direction;
1265}
1266
1268{
1269 HWND hHeader;
1270 HDITEM hColumn;
1271 int prevCol = m_sortInfo.ListColumn;
1273
1274 // FIXME: Is this correct? Who sets this style?
1275 // And if it is set, should it also block sorting using the menu?
1276 // Any why should it block sorting when the view is loaded initially?
1277 if (m_ListView.GetWindowLongPtr(GWL_STYLE) & LVS_NOSORTHEADER)
1278 return TRUE;
1279
1280 hHeader = ListView_GetHeader(m_ListView.m_hWnd);
1281 if (Col != -1)
1282 {
1283 if (Col >= Header_GetItemCount(hHeader))
1284 {
1285 ERR("Sort column out of range\n");
1286 return FALSE;
1287 }
1288
1289 if (prevCol == Col)
1290 m_sortInfo.Direction *= -1;
1291 else
1293 m_sortInfo.ListColumn = Col;
1294 }
1295 if (!m_sortInfo.Direction)
1296 m_sortInfo.Direction += 1;
1297
1298 /* If the sorting column changed, remove the sorting style from the old column */
1299 if (prevCol != -1 && prevCol != m_sortInfo.ListColumn)
1300 {
1301 hColumn.mask = HDI_FORMAT;
1302 Header_GetItem(hHeader, prevCol, &hColumn);
1303 hColumn.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN);
1304 Header_SetItem(hHeader, prevCol, &hColumn);
1305 }
1306
1307 /* Set the sorting style on the new column */
1308 hColumn.mask = HDI_FORMAT;
1309 Header_GetItem(hHeader, m_sortInfo.ListColumn, &hColumn);
1310 hColumn.fmt &= ~(HDF_SORTDOWN | HDF_SORTUP);
1311 hColumn.fmt |= (m_sortInfo.Direction > 0 ? HDF_SORTUP : HDF_SORTDOWN);
1312 Header_SetItem(hHeader, m_sortInfo.ListColumn, &hColumn);
1313
1317}
1318
1320{
1321 SFGAOF Attr = (SFGAOF)Query;
1322 return SUCCEEDED(m_pSFParent->GetAttributesOf(1, &pidl, &Attr)) ? (Attr & Query) : 0;
1323}
1324
1326{
1327 PCUITEMID_CHILD pItem = _PidlByItem(i);
1328 return pItem ? GetItemAttributes(pItem, Query) : 0;
1329}
1330
1332{
1333 if (!m_ListView)
1334 return nullptr;
1335 return reinterpret_cast<PCUITEMID_CHILD>(m_ListView.GetItemData(i));
1336}
1337
1339{
1340 if (!m_ListView)
1341 return nullptr;
1342 return reinterpret_cast<PCUITEMID_CHILD>(lvItem.lParam);
1343}
1344
1346{
1348
1349 int cItems = m_ListView.GetItemCount();
1351 for (int i = 0; i < cItems; i++)
1352 {
1353 PCUITEMID_CHILD currentpidl = _PidlByItem(i);
1354 HRESULT hr = m_pSFParent->CompareIDs(lParam, pidl, currentpidl);
1355 if (SUCCEEDED(hr))
1356 {
1357 if (hr == S_EQUAL)
1358 return i;
1359 }
1360 else
1361 {
1362#if DBG
1363 for (i = 0; pidl && i < cItems; i++)
1364 {
1365 currentpidl = _PidlByItem(i);
1366 if (currentpidl && currentpidl->mkid.cb == pidl->mkid.cb && !memcmp(currentpidl, pidl, pidl->mkid.cb))
1367 DbgPrint("Matched item #%d, broken CompareIDs?\n", i);
1368 }
1369#endif
1370 break;
1371 }
1372 }
1373 return -1;
1374}
1375
1377{
1378 LVITEMW lvItem;
1379
1380 TRACE("(%p)(pidl=%p)\n", this, pidl);
1381
1383
1385 return -1;
1386
1387 lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
1388 lvItem.iItem = m_ListView.GetItemCount(); // add item to lists end
1389 lvItem.iSubItem = 0;
1390 lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidl)); // set item's data
1391 lvItem.pszText = LPSTR_TEXTCALLBACKW; // get text on a callback basis
1392 lvItem.iImage = I_IMAGECALLBACK; // get image on a callback basis
1393 lvItem.stateMask = LVIS_CUT;
1394 if (m_HasCutItems)
1395 {
1396 lvItem.mask |= LVIF_STATE;
1397 lvItem.state = GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0;
1398 }
1399
1400 return m_ListView.InsertItem(&lvItem);
1401}
1402
1404{
1405 int nIndex;
1406
1407 TRACE("(%p)(pidl=%p)\n", this, pidl);
1408
1410
1411 nIndex = LV_FindItemByPidl(pidl);
1412 if (nIndex < 0)
1413 return FALSE;
1414
1416
1417 return m_ListView.DeleteItem(nIndex);
1418}
1419
1421{
1422 int nItem;
1423 LVITEMW lvItem;
1424
1425 TRACE("(%p)(pidlold=%p pidlnew=%p)\n", this, pidlOld, pidlNew);
1426
1428
1429 nItem = LV_FindItemByPidl(pidlOld);
1430
1431 if (-1 != nItem)
1432 {
1433 lvItem.mask = LVIF_PARAM; // only the pidl
1434 lvItem.iItem = nItem;
1435 lvItem.iSubItem = 0;
1436 m_ListView.GetItem(&lvItem);
1437
1438 // Store old pidl until new item is replaced
1439 LPVOID oldPidl = reinterpret_cast<LPVOID>(lvItem.lParam);
1440
1441 lvItem.mask = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT;
1442 lvItem.iItem = nItem;
1443 lvItem.iSubItem = 0;
1444 lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidlNew)); // set item's data
1447 m_ListView.SetItem(&lvItem);
1448 m_ListView.Update(nItem);
1449
1450 // Now that the new item is in place, we can safely release the old pidl
1451 SHFree(oldPidl);
1452
1453 return TRUE; // FIXME: better handling
1454 }
1455
1456 return FALSE;
1457}
1458
1460{
1461 BOOL bResult = FALSE;
1462 LVITEMW lvItem;
1463 if (nItem >= 0)
1464 {
1466
1467 lvItem.mask = LVIF_IMAGE;
1468 lvItem.iItem = nItem;
1469 lvItem.iSubItem = 0;
1471 lvItem.stateMask = LVIS_CUT;
1472 if (m_HasCutItems)
1473 {
1474 lvItem.mask |= LVIF_STATE;
1475 lvItem.state = GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0;
1476 }
1477 PCUITEMID_CHILD pidlOld = _PidlByItem(nItem);
1478 if (pidlOld && (lvItem.lParam = reinterpret_cast<LPARAM>(ILClone(pidl))) != NULL)
1479 lvItem.mask |= LVIF_PARAM;
1480 bResult = m_ListView.SetItem(&lvItem);
1481 if (bResult && lvItem.lParam && pidlOld)
1482 ILFree(const_cast<PUITEMID_CHILD>(pidlOld));
1483 for (UINT i = 0; m_ListView.SetItemText(nItem, i, LPSTR_TEXTCALLBACK); ++i) {} // Update all columns
1484 }
1485 return bResult;
1486}
1487
1489{
1490 TRACE("(%p)(pidl=%p)\n", this, pidl);
1492 INT nItem = LV_FindItemByPidl(pidl);
1493 return nItem >= 0 ? LV_UpdateItem(nItem, pidl) : FALSE;
1494}
1495
1497{
1499
1500 LVITEMW lvItem = { LVIF_IMAGE };
1501 lvItem.iItem = iItem;
1502 lvItem.iImage = I_IMAGECALLBACK;
1503 m_ListView.SetItem(&lvItem);
1504 m_ListView.Update(iItem);
1505}
1506
1508{
1510
1511 for (INT iItem = -1;;)
1512 {
1513 iItem = ListView_GetNextItem(m_ListView, iItem, LVNI_ALL);
1514 if (iItem == -1)
1515 break;
1516
1517 LV_RefreshIcon(iItem);
1518 }
1519}
1520
1522{
1523 PITEMID_CHILD pidl = static_cast<PITEMID_CHILD>(ptr);
1524 CDefView *pThis = static_cast<CDefView *>(arg);
1525
1526 // in a commdlg this works as a filemask
1527 if (pThis->IncludeObject(pidl) == S_OK && pThis->m_ListView)
1528 pThis->LV_AddItem(pidl);
1529
1530 SHFree(pidl);
1531 return TRUE;
1532}
1533
1535// - gets the objectlist from the shellfolder
1536// - sorts the list
1537// - fills the list into the view
1539{
1540 CComPtr<IEnumIDList> pEnumIDList;
1541 PITEMID_CHILD pidl;
1542 DWORD dwFetched;
1543 HRESULT hRes;
1544 HDPA hdpa;
1545 DWORD dFlags = SHCONTF_NONFOLDERS | ((m_FolderSettings.fFlags & FWF_NOSUBFOLDERS) ? 0 : SHCONTF_FOLDERS);
1546
1547 TRACE("%p\n", this);
1548
1549 SHELLSTATE shellstate;
1551 if (GetCommDlgViewFlags() & CDB2GVF_SHOWALLFILES)
1552 shellstate.fShowAllObjects = shellstate.fShowSuperHidden = TRUE;
1553
1554 if (shellstate.fShowAllObjects)
1555 {
1556 dFlags |= SHCONTF_INCLUDEHIDDEN;
1557 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1558 }
1559 if (shellstate.fShowSuperHidden)
1560 {
1561 dFlags |= SHCONTF_INCLUDESUPERHIDDEN;
1562 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1563 }
1564
1565 // get the itemlist from the shfolder
1566 hRes = m_pSFParent->EnumObjects(m_hWnd, dFlags, &pEnumIDList);
1567 if (hRes != S_OK)
1568 {
1569 if (hRes == S_FALSE)
1570 return(NOERROR);
1571 return(hRes);
1572 }
1573
1574 // create a pointer array
1575 hdpa = DPA_Create(16);
1576 if (!hdpa)
1577 return(E_OUTOFMEMORY);
1578
1579 // copy the items into the array
1580 while((S_OK == pEnumIDList->Next(1, &pidl, &dwFetched)) && dwFetched)
1581 {
1582 if (DPA_AppendPtr(hdpa, pidl) == -1)
1583 {
1584 SHFree(pidl);
1585 }
1586 }
1587
1588 // turn listview's redrawing off
1590
1591 DPA_DestroyCallback( hdpa, fill_list, this);
1592
1593 /* sort the array */
1594 int sortCol = -1;
1595 if (!IsRefreshCommand && !m_sortInfo.bLoadedFromViewState) // Are we loading for the first time?
1596 {
1598 sortCol = 0; // In case the folder does not know/care
1599 if (m_pSF2Parent)
1600 {
1601 ULONG folderSortCol = sortCol, dummy;
1602 HRESULT hr = m_pSF2Parent->GetDefaultColumn(NULL, &folderSortCol, &dummy);
1603 if (SUCCEEDED(hr))
1604 hr = MapFolderColumnToListColumn(folderSortCol);
1605 if (SUCCEEDED(hr))
1606 sortCol = (int) hr;
1607 }
1608 }
1609 _Sort(sortCol);
1610
1612 {
1615 }
1616
1617 // load custom background image and custom text color
1620
1621 // turn listview's redrawing back on and force it to draw
1623
1625
1627 {
1628 // redraw now
1629 m_ListView.InvalidateRect(NULL, TRUE);
1630 }
1631
1632 if (IsRefreshCommand)
1634
1636
1637 return S_OK;
1638}
1639
1641{
1642 if (m_ListView.IsWindow())
1643 m_ListView.UpdateWindow();
1644 bHandled = FALSE;
1645 return 0;
1646}
1647
1649{
1650 return m_ListView.SendMessageW(uMsg, 0, 0);
1651}
1652
1654{
1655 if (!m_Destroyed)
1656 {
1657 m_Destroyed = TRUE;
1660 m_hNotify = NULL;
1661 m_ClipboardChain.Unhook(m_hWnd);
1662 if (m_pFileMenu)
1663 {
1665 m_pFileMenu = NULL;
1666 }
1667 if (m_hMenu)
1668 {
1670 m_hMenu = NULL;
1671 }
1674 }
1675 bHandled = FALSE;
1676 return 0;
1677}
1678
1680{
1681 /* redirect to parent */
1684
1685 bHandled = FALSE;
1686 return 0;
1687}
1688
1689static VOID
1691{
1692 INT x0 = prc->left, y0 = prc->top, x1 = prc->right, y1 = prc->bottom;
1693 x0 += dx;
1694 y0 += dy;
1695
1696 HDC hMemDC = CreateCompatibleDC(hDC);
1697 HGDIOBJ hbmOld = SelectObject(hMemDC, hbm);
1698
1699 for (INT y = y0; y < y1; y += nHeight)
1700 {
1701 for (INT x = x0; x < x1; x += nWidth)
1702 {
1703 BitBlt(hDC, x, y, nWidth, nHeight, hMemDC, 0, 0, SRCCOPY);
1704 }
1705 }
1706
1707 SelectObject(hMemDC, hbmOld);
1708 DeleteDC(hMemDC);
1709}
1710
1712{
1713 HDC hDC = (HDC)wParam;
1714
1715 RECT rc;
1717
1719 {
1720 BITMAP bm;
1721 if (::GetObject(m_viewinfo_data.hbmBack, sizeof(BITMAP), &bm))
1722 {
1723 INT dx = -(::GetScrollPos(m_ListView, SB_HORZ) % bm.bmWidth);
1724 INT dy = -(::GetScrollPos(m_ListView, SB_VERT) % bm.bmHeight);
1725 DrawTileBitmap(hDC, &rc, m_viewinfo_data.hbmBack, bm.bmWidth, bm.bmHeight, dx, dy);
1726 }
1727 }
1728 else
1729 {
1731 }
1732
1733 bHandled = TRUE;
1734
1735 return TRUE;
1736}
1737
1739{
1740 /* Update desktop labels color */
1742
1743 /* Forward WM_SYSCOLORCHANGE to common controls */
1744 return m_ListView.SendMessageW(uMsg, 0, 0);
1745}
1746
1748{
1749 return reinterpret_cast<LRESULT>(m_pShellBrowser.p);
1750}
1751
1753{
1754 this->AddRef();
1755 bHandled = FALSE;
1756 return 0;
1757}
1758
1760{
1761 this->Release();
1762}
1763
1765{
1768
1769 TRACE("%p\n", this);
1770
1772 {
1773 if (FAILED(RegisterDragDrop(m_hWnd, pdt)))
1774 ERR("Error Registering DragDrop\n");
1775 }
1776
1777 /* register for receiving notifications */
1778 m_pSFParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
1779 if (ppf2)
1780 {
1781 ppf2->GetCurFolder(&m_pidlParent);
1782 }
1783
1784 if (CreateList())
1785 {
1786 if (InitList())
1787 {
1788 FillList(FALSE);
1789 }
1790 }
1791
1793 {
1794 HWND hwndSB;
1795 m_pShellBrowser->GetWindow(&hwndSB);
1797 }
1798
1799 // Set up change notification
1800 LPITEMIDLIST pidlTarget = NULL;
1801 LONG fEvents = 0;
1802 HRESULT hr = _DoFolderViewCB(SFVM_GETNOTIFY, (WPARAM)&pidlTarget, (LPARAM)&fEvents);
1803 if (FAILED(hr) || (!pidlTarget && !fEvents)) // FIXME: MSDN says both zero means no notifications
1804 {
1805 pidlTarget = m_pidlParent;
1806 fEvents = SHCNE_ALLEVENTS;
1807 }
1808 SHChangeNotifyEntry ntreg = {};
1810 if (FAILED(hr))
1811 {
1812 ntreg.fRecursive = FALSE;
1813 ntreg.pidl = pidlTarget;
1814 }
1818 fEvents, SHV_CHANGE_NOTIFY,
1819 1, &ntreg);
1820
1822
1823 int bForceFullStatusBar = false;
1824 BOOL bIsFileSystem = SHGetAttributes(NULL, m_pidlParent, SFGAO_FILESYSTEM) & SFGAO_FILESYSTEM;
1825 m_SpecialFolder = bIsFileSystem ? -1 : 0x7f; // FS folder or "generic" CSIDL
1827 {
1829 }
1830 else if (IsEqualPersistClassID(ppf2, CLSID_RecycleBin))
1831 {
1832 m_SpecialFolder = bForceFullStatusBar = CSIDL_BITBUCKET;
1833 }
1834 else if (bIsFileSystem)
1835 {
1837 if (ILIsParent(pidlNet, m_pidlParent, FALSE) && ILGetSize(pidlNet) < ILGetSize(m_pidlParent))
1839 }
1840 m_isFullStatusBar = bIsFileSystem || bForceFullStatusBar;
1841 _ForceStatusBarResize(); // This handles changing StatusBar parts
1844
1845 return S_OK;
1846}
1847
1848// #### Handling of the menus ####
1849
1851{
1853 if (!hFileMenu)
1854 return E_FAIL;
1855
1856 /* Cleanup the items added previously */
1857 for (int i = GetMenuItemCount(hFileMenu) - 1; i >= 0; i--)
1858 {
1859 UINT id = GetMenuItemID(hFileMenu, i);
1860 if (id < FCIDM_BROWSERFIRST || id > FCIDM_BROWSERLAST)
1861 DeleteMenu(hFileMenu, i, MF_BYPOSITION);
1862 }
1863
1864 // In case we still have this left over, clean it up
1865 if (m_pFileMenu)
1866 {
1869 }
1870 UINT selcount = m_ListView.GetSelectedCount();
1871 // Store context menu in m_pFileMenu and keep it to invoke the selected command later on
1874 return hr;
1875
1877
1879 hr = m_pFileMenu->QueryContextMenu(hmenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
1881 return hr;
1882
1883 // TODO: filter or something
1884 if (!selcount)
1885 {
1889 }
1890
1891 Shell_MergeMenus(hFileMenu, hmenu, 0, 0, 0xFFFF, MM_ADDSEPARATOR | MM_SUBMENUSHAVEIDS);
1893 return S_OK;
1894}
1895
1897{
1899 if (!hEditMenu)
1900 return E_FAIL;
1901
1902 HMENU hmenuContents = ::LoadMenuW(shell32_hInstance, L"MENU_003");
1903 if (!hmenuContents)
1904 return E_FAIL;
1905
1906 Shell_MergeMenus(hEditMenu, hmenuContents, 0, 0, 0xFFFF, 0);
1907
1908 ::DestroyMenu(hmenuContents);
1909
1910 return S_OK;
1911}
1912
1914{
1916 if (!hViewMenu)
1917 return E_FAIL;
1918
1920 if (!m_hMenuViewModes)
1921 return E_FAIL;
1922
1925
1926 return S_OK;
1927}
1928
1930{
1931 bool forceMerge = false;
1933
1934 // Make sure the column we currently sort by is in the menu
1937 {
1941 LVCOLUMN lvc;
1942 lvc.mask = LVCF_TEXT;
1943 lvc.pszText = buf;
1944 lvc.cchTextMax = _countof(buf);
1945 currentSortId = DVIDM_ARRANGESORT_LAST;
1946 forceMerge = true;
1948 AppendMenuItem(m_hMenuArrangeModes, MF_STRING, currentSortId, lvc.pszText, m_sortInfo.ListColumn);
1949 }
1950
1951 // Prepend the sort-by items unless they are aleady there
1952 if (GetMenuItemID(hmenuArrange, 0) == FCIDM_SHVIEW_AUTOARRANGE || forceMerge)
1953 {
1954 Shell_MergeMenus(hmenuArrange, m_hMenuArrangeModes, 0, 0, 0xFFFF, MM_ADDSEPARATOR);
1955 }
1956
1957 CheckMenuRadioItem(hmenuArrange,
1959 currentSortId, MF_BYCOMMAND);
1960
1962 {
1965 }
1966 else
1967 {
1970
1971 if (GetAutoArrange() == S_OK)
1973 else
1975
1976 if (_GetSnapToGrid() == S_OK)
1978 else
1980 }
1981
1982 return S_OK;
1983}
1984
1986{
1988 {
1989 UINT iItemFirst = FCIDM_SHVIEW_BIGICON;
1990 UINT iItemLast = iItemFirst + FVM_LAST - FVM_FIRST;
1991 UINT iItem = iItemFirst + m_FolderSettings.ViewMode - FVM_FIRST;
1992 CheckMenuRadioItem(hmenuView, iItemFirst, iItemLast, iItem, MF_BYCOMMAND);
1993 }
1994
1995 return S_OK;
1996}
1997
1999{
2000 const UINT maxItems = 15; // Feels about right
2001 const UINT idMore = 0x1337;
2002 UINT idFirst = idMore + 1, idLast = idFirst;
2003 UINT lastValidListCol = 0; // Keep track of where the new column should be inserted
2004 UINT showMore = GetKeyState(VK_SHIFT) < 0;
2006 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
2007
2008 if (lParam == ~0)
2009 {
2010 RECT r;
2011 ::GetWindowRect(hWndHdr, &r);
2012 pt.x = r.left + ((r.right - r.left) / 2);
2013 pt.y = r.top + ((r.bottom - r.top) / 2);
2014 }
2015
2016 HMENU hMenu = CreatePopupMenu();
2017 if (!hMenu)
2018 return 0;
2019
2020 for (UINT foldCol = 0;; ++foldCol)
2021 {
2024 sd.str.uType = !STRRET_WSTR;
2025 if (FAILED(GetDetailsByFolderColumn(NULL, foldCol, sd)))
2026 break;
2027 if (FAILED(StrRetToStrNW(buf, _countof(buf), &sd.str, NULL)))
2028 break;
2029
2030 SHCOLSTATEF state = 0;
2031 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
2032 state = 0;
2033 showMore |= (state & (SHCOLSTATE_SECONDARYUI));
2034
2035 UINT mf = MF_STRING;
2036 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
2037
2038 if (foldCol == 0)
2039 mf |= MF_CHECKED | MF_GRAYED | MF_DISABLED; // Force column 0
2041 continue;
2042 else if (SUCCEEDED(listCol))
2043 mf |= MF_CHECKED;
2044
2045 if (AppendMenuItem(hMenu, mf, idLast, buf, lastValidListCol + 1))
2046 {
2047 idLast++;
2048 if (SUCCEEDED(listCol))
2049 lastValidListCol = listCol;
2050 }
2051
2052 if (idLast - idFirst == maxItems)
2053 {
2054 showMore++;
2055 break;
2056 }
2057 }
2058
2059 if (showMore)
2060 {
2061#if 0 // TODO
2062 InsertMenuW(hMenu, -1, MF_SEPARATOR, 0, NULL);
2063 InsertMenuW(hMenu, -1, MF_STRING, idMore, L"More...");
2064#endif
2065 }
2066
2067 // A cludge to force the cursor to update so we are not stuck with "size left/right" if
2068 // the right-click was on a column divider.
2070
2071 // Note: Uses the header as the owner so CDefView::OnInitMenuPopup does not mess us up.
2073 pt.x, pt.y, 0, hWndHdr, NULL);
2074 if (idCmd == idMore)
2075 {
2076 FIXME("Open More dialog\n");
2077 }
2078 else if (idCmd)
2079 {
2080 UINT foldCol = idCmd - idFirst;
2081 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
2082 if (SUCCEEDED(listCol))
2083 {
2084 ListView_DeleteColumn(m_ListView.m_hWnd, listCol);
2085 }
2086 else
2087 {
2088 listCol = (UINT) GetMenuItemDataById(hMenu, idCmd);
2089 LoadColumn(foldCol, listCol, TRUE);
2090 }
2092 }
2093 DestroyMenu(hMenu);
2094 return 0;
2095}
2096
2097/**********************************************************
2098* ShellView_GetSelections()
2099*
2100* - fills the m_apidl list with the selected objects
2101*
2102* RETURNS
2103* number of selected items
2104*/
2106{
2108 if (count > m_cidl || !count || !m_apidl) // !count to free possibly large cache, !m_apidl to make sure m_apidl is a valid pointer
2109 {
2110 SHFree(m_apidl);
2111 m_apidl = static_cast<PCUITEMID_CHILD*>(SHAlloc(count * sizeof(PCUITEMID_CHILD)));
2112 if (!m_apidl)
2113 {
2114 m_cidl = 0;
2115 return 0;
2116 }
2117 }
2118 m_cidl = count;
2119
2120 TRACE("-- Items selected =%u\n", m_cidl);
2121
2123
2124 UINT i = 0;
2125 int lvIndex = -1;
2126 while ((lvIndex = m_ListView.GetNextItem(lvIndex, LVNI_SELECTED)) > -1)
2127 {
2128 m_apidl[i] = _PidlByItem(lvIndex);
2129 i++;
2130 if (i == m_cidl)
2131 break;
2132 TRACE("-- selected Item found\n");
2133 }
2134
2135 return m_cidl;
2136}
2137
2139{
2140 if (!GetSelections())
2141 return 0;
2142 SFGAOF Attr = Query;
2143 return SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &Attr)) ? (Attr & Query) : 0;
2144}
2145
2147{
2148 CMINVOKECOMMANDINFOEX cmi;
2149
2150 ZeroMemory(&cmi, sizeof(cmi));
2151 cmi.cbSize = sizeof(cmi);
2152 cmi.hwnd = m_hWnd;
2153 cmi.lpVerb = lpVerb;
2154 cmi.nShow = SW_SHOW;
2155
2156 WCHAR szverbW[sizeof("properties")];
2157 static const WORD verbmap[] = { FCIDM_SHVIEW_DELETE, FCIDM_SHVIEW_RENAME,
2160 for (SIZE_T i = 0; TryMapVerb && i < _countof(verbmap); ++i)
2161 {
2162 if (cmi.lpVerb != MAKEINTRESOURCEA(verbmap[i]))
2163 continue;
2164 if (PCSTR pszverbA = MapFcidmCmdToVerb((UINT_PTR)cmi.lpVerb))
2165 {
2166 // Map our internal commands to canonical verbs so non-shell32 menus can understand us
2167 SHAnsiToUnicode(pszverbA, szverbW, _countof(szverbW));
2168 cmi.lpVerb = pszverbA;
2169 cmi.lpVerbW = szverbW;
2170 break;
2171 }
2172 }
2173
2174 if (GetKeyState(VK_SHIFT) < 0)
2175 cmi.fMask |= CMIC_MASK_SHIFT_DOWN;
2176
2177 if (GetKeyState(VK_CONTROL) < 0)
2178 cmi.fMask |= CMIC_MASK_CONTROL_DOWN;
2179
2180 if (pt)
2181 {
2182 cmi.fMask |= CMIC_MASK_PTINVOKE;
2183 cmi.ptInvoke = *pt;
2184 }
2185
2186 WCHAR szDirW[MAX_PATH] = L"";
2187 CHAR szDirA[MAX_PATH];
2189 *szDirW != UNICODE_NULL)
2190 {
2191 SHUnicodeToAnsi(szDirW, szDirA, _countof(szDirA));
2192 cmi.fMask |= CMIC_MASK_UNICODE;
2193 cmi.lpDirectory = szDirA;
2194 cmi.lpDirectoryW = szDirW;
2195 }
2196
2197 HRESULT hr = pCM->InvokeCommand((LPCMINVOKECOMMANDINFO)&cmi);
2198 // Most of our callers will do this, but if they would forget (File menu!)
2199 IUnknown_SetSite(pCM, NULL);
2200 pCM.Release();
2201
2203 return hr;
2204
2205 return S_OK;
2206}
2207
2209{
2210 HMENU hMenu;
2211 UINT uCommand;
2212 HRESULT hResult;
2213
2214 if (m_ListView.GetSelectedCount() == 0)
2215 return S_OK;
2216
2217 hResult = OnDefaultCommand();
2218 if (hResult == S_OK)
2219 return hResult;
2220
2221 hMenu = CreatePopupMenu();
2222 if (!hMenu)
2223 return E_FAIL;
2224
2227 MenuCleanup _(pCM, hMenu);
2228 if (FAILED_UNEXPECTEDLY(hResult))
2229 return hResult;
2230
2231 UINT cmf = CMF_DEFAULTONLY | GetContextMenuFlags(m_pShellBrowser, 0);
2232 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
2233 if (FAILED_UNEXPECTEDLY(hResult))
2234 return hResult;
2235
2236 uCommand = GetMenuDefaultItem(hMenu, FALSE, 0);
2237 if (uCommand == (UINT)-1 && !pszVerb)
2238 {
2239 ERR("GetMenuDefaultItem returned -1\n");
2240 return E_FAIL;
2241 }
2242 if (!pszVerb)
2243 pszVerb = MAKEINTRESOURCEA(uCommand);
2244
2245 InvokeContextMenuCommand(pCM, pszVerb, NULL);
2246
2247 return hResult;
2248}
2249
2251{
2253 UINT uCommand;
2254 HRESULT hResult;
2255
2256 TRACE("(%p)\n", this);
2257
2258 if (m_hContextMenu != NULL)
2259 {
2260 ERR("HACK: Aborting context menu in nested call\n");
2261 return 0;
2262 }
2263
2264 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
2265 RECT r;
2266 if (::GetWindowRect(hWndHdr, &r) && PtInRect(&r, pt) && ::IsWindowVisible(hWndHdr))
2267 {
2269 }
2270
2272 if (!m_hContextMenu)
2273 return E_FAIL;
2274
2275 if (lParam != ~0) // unless app key (menu key) was pressed
2276 {
2277 LV_HITTESTINFO hittest = { pt };
2278 ScreenToClient(&hittest.pt);
2279 m_ListView.HitTest(&hittest);
2280
2281 // Right-Clicked item is selected? If selected, no selection change.
2282 // If not selected, then reset the selection and select the item.
2283 if ((hittest.flags & LVHT_ONITEM) &&
2285 {
2286 SelectItem(hittest.iItem, SVSI_SELECT | SVSI_DESELECTOTHERS | SVSI_ENSUREVISIBLE);
2287 }
2288 }
2289
2291 // In case we still have this left over, clean it up
2294 if (FAILED_UNEXPECTEDLY(hResult))
2295 return 0;
2296
2298 // Use 1 as the first id we want. 0 means that user canceled the menu
2299 hResult = m_pCM->QueryContextMenu(m_hContextMenu, 0, CONTEXT_MENU_BASE_ID, DVIDM_CONTEXTMENU_LAST, cmf);
2300 if (FAILED_UNEXPECTEDLY(hResult))
2301 return 0;
2302
2303 if (m_pCommDlgBrowser && !(GetCommDlgViewFlags() & CDB2GVF_NOSELECTVERB))
2304 {
2305 HMENU hMenuSource = LoadMenuW(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCEW(IDM_DVSELECT));
2307 DestroyMenu(hMenuSource);
2309 // TODO: ICommDlgBrowser2::GetDefaultMenuText == S_OK
2310 }
2311
2312 // There is no position requested, so try to find one
2313 if (lParam == ~0)
2314 {
2315 HWND hFocus = ::GetFocus();
2316 int lvIndex = -1;
2317
2318 if (hFocus == m_ListView.m_hWnd || m_ListView.IsChild(hFocus))
2319 {
2320 // Is there an item focused and selected?
2322 // If not, find the first selected item
2323 if (lvIndex < 0)
2324 lvIndex = m_ListView.GetNextItem(-1, LVNI_SELECTED);
2325 }
2326
2327 // We got something
2328 if (lvIndex > -1)
2329 {
2330 // Find the center of the icon
2331 RECT rc = { LVIR_ICON };
2332 m_ListView.SendMessage(LVM_GETITEMRECT, lvIndex, (LPARAM)&rc);
2333 pt.x = (rc.right + rc.left) / 2;
2334 pt.y = (rc.bottom + rc.top) / 2;
2335 }
2336 else
2337 {
2338 // We have to drop it somewhere
2339 pt.x = pt.y = 0;
2340 }
2341
2342 m_ListView.ClientToScreen(&pt);
2343 }
2344
2347 pcdb2->Notify(static_cast<IShellView*>(this), CDB2N_CONTEXTMENU_START);
2348
2349 // This runs the message loop, calling back to us with f.e. WM_INITPOPUP (hence why m_hContextMenu and m_pCM exist)
2350 uCommand = TrackPopupMenu(m_hContextMenu,
2352 pt.x, pt.y, 0, m_hWnd, NULL);
2353 if (uCommand >= DVIDM_ARRANGESORT_FIRST && uCommand <= DVIDM_ARRANGESORT_LAST)
2354 {
2355 SendMessage(WM_COMMAND, uCommand, 0);
2356 }
2357 else if (uCommand != 0 && !(uCommand == DVIDM_COMMDLG_SELECT && OnDefaultCommand() == S_OK))
2358 {
2360 }
2361
2362 if (pcdb2)
2363 pcdb2->Notify(static_cast<IShellView*>(this), CDB2N_CONTEXTMENU_DONE);
2364 return 0;
2365}
2366
2368{
2369 HRESULT hResult;
2370 HMENU hMenu = NULL;
2371
2373 hResult = GetItemObject(bUseSelection ? SVGIO_SELECTION : SVGIO_BACKGROUND, IID_PPV_ARG(IContextMenu, &pCM));
2374 if (FAILED_UNEXPECTEDLY(hResult))
2375 return 0;
2376
2377 MenuCleanup _(pCM, hMenu);
2378
2379 if ((uCommand != FCIDM_SHVIEW_DELETE) && (uCommand != FCIDM_SHVIEW_RENAME))
2380 {
2381 hMenu = CreatePopupMenu();
2382 if (!hMenu)
2383 return 0;
2384
2385 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, CMF_NORMAL);
2386 if (FAILED_UNEXPECTEDLY(hResult))
2387 return 0;
2388 }
2389
2390 if (bUseSelection)
2391 {
2392 // FIXME: we should cache this
2393 SFGAOF rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER;
2394 hResult = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2395 if (FAILED_UNEXPECTEDLY(hResult))
2396 return 0;
2397
2398 if (!(rfg & SFGAO_CANMOVE) && uCommand == FCIDM_SHVIEW_CUT)
2399 return 0;
2400 if (!(rfg & SFGAO_CANCOPY) && uCommand == FCIDM_SHVIEW_COPY)
2401 return 0;
2402 if (!(rfg & SFGAO_CANDELETE) && uCommand == FCIDM_SHVIEW_DELETE)
2403 return 0;
2404 if (!(rfg & SFGAO_CANRENAME) && uCommand == FCIDM_SHVIEW_RENAME)
2405 return 0;
2406 if (!(rfg & SFGAO_HASPROPSHEET) && uCommand == FCIDM_SHVIEW_PROPERTIES)
2407 return 0;
2408 }
2409
2410 // FIXME: We should probably use the objects position?
2411 InvokeContextMenuCommand(pCM, MAKEINTRESOURCEA(uCommand), NULL, true);
2412 return 0;
2413}
2414
2415// ##### message handling #####
2416
2418{
2419 WORD wWidth, wHeight;
2420
2421 wWidth = LOWORD(lParam);
2422 wHeight = HIWORD(lParam);
2423
2424 TRACE("%p width=%u height=%u\n", this, wWidth, wHeight);
2425
2426 // WM_SIZE can come before WM_CREATE
2427 if (!m_ListView)
2428 return 0;
2429
2430 /* Resize the ListView to fit our window */
2431 ::MoveWindow(m_ListView, 0, 0, wWidth, wHeight, TRUE);
2432
2434
2437
2438 return 0;
2439}
2440
2441// internal
2443{
2444 TRACE("%p\n", this);
2445
2447 {
2448 // TODO: cleanup menu after deactivation
2450 }
2451}
2452
2454{
2455 TRACE("%p uState=%x\n", this, uState);
2456
2457 // don't do anything if the state isn't really changing
2458 if (m_uState == uState)
2459 {
2460 return;
2461 }
2462
2463 if (uState == SVUIA_DEACTIVATE)
2464 {
2465 OnDeactivate();
2466 }
2467 else
2468 {
2470 {
2471 FillEditMenu();
2472 FillViewMenu();
2473 m_pShellBrowser->SetMenuSB(m_hMenu, 0, m_hWnd);
2475 }
2476
2477 if (SVUIA_ACTIVATE_FOCUS == uState)
2478 {
2479 m_ListView.SetFocus();
2480 }
2481 }
2482
2483 m_uState = uState;
2484 TRACE("--\n");
2485}
2486
2488{
2489 if (!GetSelections())
2490 return;
2491
2492 SFGAOF rfg = SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_FILESYSTEM;
2493 HRESULT hr = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2495 return;
2496
2497 if (!bCopy && !(rfg & SFGAO_CANMOVE))
2498 return;
2499 if (bCopy && !(rfg & SFGAO_CANCOPY))
2500 return;
2501
2503 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_IContextMenu, 0, (void **)&pCM);
2505 return;
2506
2507 InvokeContextMenuCommand(pCM, (bCopy ? "copyto" : "moveto"), NULL);
2508}
2509
2511{
2513 return 0;
2514}
2515
2517{
2518 TRACE("%p\n", this);
2519
2520 /* Tell the browser one of our windows has received the focus. This
2521 should always be done before merging menus (OnActivate merges the
2522 menus) if one of our windows has the focus.*/
2523
2524 m_pShellBrowser->OnViewWindowActive(this);
2526
2527 /* Set the focus to the listview */
2528 m_ListView.SetFocus();
2529
2530 /* Notify the ICommDlgBrowser interface */
2531 OnStateChange(CDBOSC_SETFOCUS);
2532
2533 return 0;
2534}
2535
2537{
2538 TRACE("(%p) stub\n", this);
2539
2541 /* Notify the ICommDlgBrowser */
2542 OnStateChange(CDBOSC_KILLFOCUS);
2543
2544 return 0;
2545}
2546
2547// the CmdID's are the ones from the context menu
2549{
2550 DWORD dwCmdID;
2551 DWORD dwCmd;
2552 HWND hwndCmd;
2553 int nCount;
2554
2555 dwCmdID = GET_WM_COMMAND_ID(wParam, lParam);
2557 hwndCmd = GET_WM_COMMAND_HWND(wParam, lParam);
2558
2559 TRACE("(%p)->(0x%08x 0x%08x %p) stub\n", this, dwCmdID, dwCmd, hwndCmd);
2560
2561 if (dwCmdID >= DVIDM_ARRANGESORT_FIRST && dwCmdID <= DVIDM_ARRANGESORT_LAST)
2562 {
2563 UINT listCol = (UINT)GetMenuItemDataById(m_hMenuArrangeModes, dwCmdID);
2564 _Sort(listCol);
2565 return 0;
2566 }
2567
2568 switch (dwCmdID)
2569 {
2574 case 0x702D:
2576 case 0x702F:
2578 break;
2581 break;
2583 if (_GetSnapToGrid() == S_OK)
2585 else
2586 ArrangeGrid();
2587 break;
2589 if (GetAutoArrange() == S_OK)
2590 m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
2591 else
2592 AutoArrange();
2593 break;
2597 break;
2599 nCount = m_ListView.GetItemCount();
2600 for (int i=0; i < nCount; i++)
2602 break;
2605 break;
2607 Refresh();
2608 break;
2610 case FCIDM_SHVIEW_CUT:
2611 case FCIDM_SHVIEW_COPY:
2615 return 0;
2616 return OnExplorerCommand(dwCmdID, TRUE);
2620 return 0;
2622 case FCIDM_SHVIEW_UNDO:
2625 return OnExplorerCommand(dwCmdID, FALSE);
2626 default:
2627 // WM_COMMAND messages from file menu are routed to CDefView to let m_pFileMenu handle them
2628 if (m_pFileMenu && dwCmd == 0)
2629 {
2630 HMENU Dummy = NULL;
2631 MenuCleanup _(m_pFileMenu, Dummy);
2633 }
2634 }
2635
2636 return 0;
2637}
2638
2639static BOOL
2641{
2642 HKEY hKey;
2643 LONG error;
2644 DWORD dwValue = FALSE, cbValue;
2645
2647 if (error)
2648 return dwValue;
2649
2650 cbValue = sizeof(dwValue);
2651 RegQueryValueExW(hKey, L"SelectExtOnRename", NULL, NULL, (LPBYTE)&dwValue, &cbValue);
2652
2654 return !!dwValue;
2655}
2656
2658{
2659 UINT CtlID;
2660 LPNMHDR lpnmh;
2661 LPNMLISTVIEW lpnmlv;
2662 NMLVDISPINFOW *lpdi;
2663 PCUITEMID_CHILD pidl;
2664 BOOL unused;
2665
2666 CtlID = wParam;
2667 lpnmh = (LPNMHDR)lParam;
2668 lpnmlv = (LPNMLISTVIEW)lpnmh;
2669 lpdi = (NMLVDISPINFOW *)lpnmh;
2670
2671 TRACE("%p CtlID=%u lpnmh->code=%x\n", this, CtlID, lpnmh->code);
2672
2673 switch (lpnmh->code)
2674 {
2675 case NM_SETFOCUS:
2676 TRACE("-- NM_SETFOCUS %p\n", this);
2677 OnSetFocus(0, 0, 0, unused);
2678 break;
2679 case NM_KILLFOCUS:
2680 TRACE("-- NM_KILLFOCUS %p\n", this);
2681 OnDeactivate();
2682 /* Notify the ICommDlgBrowser interface */
2683 OnStateChange(CDBOSC_KILLFOCUS);
2684 break;
2685 case NM_CUSTOMDRAW:
2686 TRACE("-- NM_CUSTOMDRAW %p\n", this);
2687 return CDRF_DODEFAULT;
2688 case NM_RELEASEDCAPTURE:
2689 TRACE("-- NM_RELEASEDCAPTURE %p\n", this);
2690 break;
2691 case NM_CLICK:
2692 TRACE("-- NM_CLICK %p\n", this);
2693 break;
2694 case NM_RCLICK:
2695 TRACE("-- NM_RCLICK %p\n", this);
2696 break;
2697 case NM_DBLCLK:
2698 TRACE("-- NM_DBLCLK %p\n", this);
2699 break;
2700 case NM_RETURN:
2701 TRACE("-- NM_RETURN %p\n", this);
2702 break;
2703 case HDN_ENDTRACKW:
2704 TRACE("-- HDN_ENDTRACKW %p\n", this);
2705 //nColumn1 = m_ListView.GetColumnWidth(0);
2706 //nColumn2 = m_ListView.GetColumnWidth(1);
2707 break;
2708 case LVN_DELETEITEM:
2709 TRACE("-- LVN_DELETEITEM %p\n", this);
2710 /*delete the pidl because we made a copy of it*/
2711 SHFree(reinterpret_cast<LPVOID>(lpnmlv->lParam));
2712 break;
2713 case LVN_DELETEALLITEMS:
2714 TRACE("-- LVN_DELETEALLITEMS %p\n", this);
2715 return FALSE;
2716 case LVN_INSERTITEM:
2717 TRACE("-- LVN_INSERTITEM (STUB)%p\n", this);
2718 break;
2719 case LVN_ITEMACTIVATE:
2720 TRACE("-- LVN_ITEMACTIVATE %p\n", this);
2721 OpenSelectedItems(((NMITEMACTIVATE *)lpnmh)->uKeyFlags & LVKF_ALT ? "properties" : NULL);
2722 break;
2723 case LVN_COLUMNCLICK:
2724 {
2725 UINT foldercol = MapListColumnToFolderColumn(lpnmlv->iSubItem);
2726 HRESULT hr = S_FALSE;
2727 if (m_pSDParent)
2728 hr = m_pSDParent->ColumnClick(foldercol);
2729 if (hr != S_OK)
2730 hr = _DoFolderViewCB(SFVM_COLUMNCLICK, foldercol, 0);
2731 if (hr != S_OK)
2732 _Sort(lpnmlv->iSubItem);
2733 break;
2734 }
2735 case LVN_GETDISPINFOA:
2736 case LVN_GETDISPINFOW:
2737 TRACE("-- LVN_GETDISPINFO %p\n", this);
2738 pidl = _PidlByItem(lpdi->item);
2739
2740 if (lpdi->item.mask & LVIF_TEXT) /* text requested */
2741 {
2744 break;
2745
2746 if (lpnmh->code == LVN_GETDISPINFOA)
2747 {
2748 /* shouldn't happen */
2749 NMLVDISPINFOA *lpdiA = (NMLVDISPINFOA *)lpnmh;
2750 StrRetToStrNA( lpdiA->item.pszText, lpdiA->item.cchTextMax, &sd.str, NULL);
2751 TRACE("-- text=%s\n", lpdiA->item.pszText);
2752 }
2753 else /* LVN_GETDISPINFOW */
2754 {
2755 StrRetToStrNW( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL);
2756 TRACE("-- text=%s\n", debugstr_w(lpdi->item.pszText));
2757 }
2758 }
2759 if (lpdi->item.mask & LVIF_IMAGE)
2760 {
2762 }
2763 if (lpdi->item.mask & LVIF_STATE)
2764 {
2765 if ((lpdi->item.stateMask & LVIS_CUT) && GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED))
2766 lpdi->item.state |= LVIS_CUT;
2767 }
2768 lpdi->item.mask |= LVIF_DI_SETITEM;
2769 break;
2770 case LVN_ITEMCHANGED:
2771 TRACE("-- LVN_ITEMCHANGED %p\n", this);
2772 if ((lpnmlv->uOldState ^ lpnmlv->uNewState) & (LVIS_SELECTED | LVIS_FOCUSED))
2773 {
2774 OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject
2775 // FIXME: Use LVIS_DROPHILITED instead in drag_notify_subitem
2777 {
2780 }
2781 _DoFolderViewCB(SFVM_SELECTIONCHANGED, NULL/* FIXME */, NULL/* FIXME */);
2782 }
2783 break;
2784 case LVN_BEGINDRAG:
2785 case LVN_BEGINRDRAG:
2786 TRACE("-- LVN_BEGINDRAG\n");
2787 if (GetSelections())
2788 {
2790 DWORD dwAttributes = SFGAO_CANCOPY | SFGAO_CANLINK;
2791 DWORD dwEffect = DROPEFFECT_MOVE;
2792
2793 if (SUCCEEDED(m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_NULL_PPV_ARG(IDataObject, &pda))))
2794 {
2796
2797 if (SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &dwAttributes)))
2798 dwEffect |= dwAttributes & (SFGAO_CANCOPY | SFGAO_CANLINK);
2799
2801 if (SUCCEEDED(pda->QueryInterface(IID_PPV_ARG(IAsyncOperation, &piaso))))
2802 piaso->SetAsyncMode(TRUE);
2803
2804 DWORD dwEffect2;
2805
2806 m_pSourceDataObject = pda;
2807 m_ptFirstMousePos = params->ptAction;
2810
2811 HIMAGELIST big_icons, small_icons;
2812 Shell_GetImageLists(&big_icons, &small_icons);
2813 PCUITEMID_CHILD pidl = _PidlByItem(params->iItem);
2814 int iIcon = SHMapPIDLToSystemImageListIndex(m_pSFParent, pidl, 0);
2815 POINT ptItem;
2816 m_ListView.GetItemPosition(params->iItem, &ptItem);
2817
2818 ImageList_BeginDrag(big_icons, iIcon, params->ptAction.x - ptItem.x, params->ptAction.y - ptItem.y);
2819 DoDragDrop(pda, this, dwEffect, &dwEffect2);
2821 }
2822 }
2823 break;
2825 {
2826 TRACE("-- LVN_BEGINLABELEDITW %p\n", this);
2828 pidl = _PidlByItem(lpdi->item);
2829 DWORD fAttr = pidl ? GetItemAttributes(pidl, SFGAO_CANRENAME | SFGAO_FOLDER | SFGAO_FILESYSTEM) : 0;
2830 if (!hEdit || !(fAttr & SFGAO_CANRENAME))
2831 {
2832 MessageBeep(0xffffffff);
2833 return TRUE;
2834 }
2835
2836 WCHAR szName[MAX_PATH], *pszText = lpdi->item.pszText;
2837 if (SUCCEEDED(DisplayNameOfW(m_pSFParent, pidl, SHGDN_FOREDITING | SHGDN_INFOLDER,
2839 {
2840 pszText = szName;
2841 ::SetWindowText(hEdit, pszText);
2842 }
2843
2844 // smartass-renaming: See CORE-15242
2845 if (!(fAttr & SFGAO_FOLDER) && (fAttr & SFGAO_FILESYSTEM) &&
2846 (lpdi->item.mask & LVIF_TEXT) && !SelectExtOnRename())
2847 {
2849 WCHAR szFullPath[MAX_PATH];
2850 if (SHGetPathFromIDListW(pidlFull, szFullPath) && !SHELL_FS_HideExtension(szFullPath))
2851 {
2852 LPWSTR pchDotExt = PathFindExtensionW(pszText);
2853 ::PostMessageW(hEdit, EM_SETSEL, 0, pchDotExt - pszText);
2855 }
2856 }
2857
2858 INT cchLimit = 0;
2859 _DoFolderViewCB(SFVM_GETNAMELENGTH, (WPARAM)pidl, (LPARAM)&cchLimit);
2860 if (cchLimit)
2861 ::SendMessageW(hEdit, EM_SETLIMITTEXT, cchLimit, 0);
2863 m_isEditing = TRUE;
2864 return FALSE;
2865 }
2866 case LVN_ENDLABELEDITW:
2867 {
2868 TRACE("-- LVN_ENDLABELEDITW %p\n", this);
2870 if (!lpdi->item.pszText)
2871 return TRUE;
2872
2873 pidl = _PidlByItem(lpdi->item);
2874 // We have to copy the old PIDL because SetNameOf might generate a SHCNE_UPDATEITEM
2875 // and that notification can cause us to call LV_UpdateItem and free the old PIDL too soon.
2877 if (!pidlOld)
2878 {
2880 return FALSE;
2881 }
2882 PITEMID_CHILD pidlNew = NULL;
2883 HRESULT hr = m_pSFParent->SetNameOf(0, pidlOld, lpdi->item.pszText, SHGDN_INFOLDER, &pidlNew);
2884 if (SUCCEEDED(hr) && pidlNew)
2885 {
2886 int iNew = LV_FindItemByPidl(pidlNew);
2887 if (iNew != lpdi->item.iItem && iNew >= 0)
2888 ILFree(pidlNew);// A SHCNE has updated the item already
2889 else if (!LV_UpdateItem(lpdi->item.iItem, pidlNew))
2890 ILFree(pidlNew);
2891 OnStateChange(CDBOSC_RENAME);
2892 }
2893 else
2894 {
2895 ::PostMessageW(m_ListView, LVM_EDITLABEL, lpdi->item.iItem, 0); // Renaming failed, let the user try again
2896 }
2897 return FALSE;
2898 }
2899 default:
2900 TRACE("-- %p WM_COMMAND %x unhandled\n", this, lpnmh->code);
2901 break;
2902 }
2903
2904 return 0;
2905}
2906
2907// This is just a quick hack to make the desktop work correctly.
2908// ITranslateShellChangeNotify's IsChildID is undocumented, but most likely the
2909// way that a folder should know if it should update upon a change notification.
2910// It is exported by merged folders at a minimum.
2912{
2913 if (!pidl1 || !pidl2)
2914 return FALSE;
2915 if (ILIsParent(pidl1, pidl2, TRUE))
2916 return TRUE;
2917
2918 CComHeapPtr<ITEMIDLIST_ABSOLUTE> pidl2Clone(ILClone(pidl2));
2919 ILRemoveLastID(pidl2Clone);
2920 return ILIsEqual(pidl1, pidl2Clone);
2921}
2922
2924{
2925 // The change notify can come before WM_CREATE
2926 if (!m_ListView)
2927 return FALSE;
2928
2929 HANDLE hChange = (HANDLE)wParam;
2930 DWORD dwProcID = (DWORD)lParam;
2931 PIDLIST_ABSOLUTE *Pidls;
2932 LONG lEvent;
2933 HANDLE hLock = SHChangeNotification_Lock(hChange, dwProcID, &Pidls, &lEvent);
2934 if (hLock == NULL)
2935 {
2936 ERR("hLock == NULL\n");
2937 return FALSE;
2938 }
2939 lEvent &= ~SHCNE_INTERRUPT;
2940 TRACE("(%p)(%p,%p,%p) %#x\n", this, Pidls[0], Pidls[1], lParam, lEvent);
2941
2943 {
2945 return FALSE;
2946 }
2947
2948 // Translate child IDLs.
2949 // SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes)
2950 HRESULT hr;
2951 PITEMID_CHILD child0 = NULL, child1 = NULL;
2952 CComHeapPtr<ITEMIDLIST_RELATIVE> pidl0Temp, pidl1Temp;
2954 {
2955 if (_ILIsSpecialFolder(Pidls[0]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[0]))
2956 {
2957 child0 = ILFindLastID(Pidls[0]);
2958 hr = SHGetRealIDL(m_pSFParent, child0, &pidl0Temp);
2959 if (SUCCEEDED(hr))
2960 child0 = pidl0Temp;
2961 }
2962 if (_ILIsSpecialFolder(Pidls[1]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[1]))
2963 {
2964 child1 = ILFindLastID(Pidls[1]);
2965 hr = SHGetRealIDL(m_pSFParent, child1, &pidl1Temp);
2966 if (SUCCEEDED(hr))
2967 child1 = pidl1Temp;
2968 }
2969 }
2970
2971 switch (lEvent)
2972 {
2973 case SHCNE_MKDIR:
2974 case SHCNE_CREATE:
2975 case SHCNE_DRIVEADD:
2976 if (!child0)
2977 break;
2978 if (LV_FindItemByPidl(child0) < 0)
2979 LV_AddItem(child0);
2980 else
2981 LV_UpdateItem(child0);
2982 break;
2983 case SHCNE_RMDIR:
2984 case SHCNE_DELETE:
2985 case SHCNE_DRIVEREMOVED:
2986 if (child0)
2987 LV_DeleteItem(child0);
2988 break;
2989 case SHCNE_RENAMEFOLDER:
2990 case SHCNE_RENAMEITEM:
2991 if (child0 && child1)
2992 LV_RenameItem(child0, child1);
2993 else if (child0)
2994 LV_DeleteItem(child0);
2995 else if (child1)
2996 LV_AddItem(child1);
2997 break;
2998 case SHCNE_UPDATEITEM:
2999 if (child0)
3000 LV_UpdateItem(child0);
3001 break;
3002 case SHCNE_UPDATEIMAGE:
3004 case SHCNE_MEDIAREMOVED:
3005 case SHCNE_ASSOCCHANGED:
3007 break;
3008 case SHCNE_UPDATEDIR:
3009 case SHCNE_ATTRIBUTES:
3010 if (child0)
3011 LV_UpdateItem(child0);
3012 else
3013 Refresh();
3015 break;
3016 case SHCNE_FREESPACE:
3018 break;
3019 }
3020
3022 return TRUE;
3023}
3024
3026{
3027 if (!m_pCM)
3028 {
3029 /* no menu */
3030 ERR("no context menu\n");
3031 return FALSE;
3032 }
3033 LRESULT result = 0;
3035 return SUCCEEDED(hres);
3036}
3037
3039{
3040 /* Wallpaper setting affects drop shadows effect */
3041 if (wParam == SPI_SETDESKWALLPAPER || wParam == 0)
3043
3045 UINT ListExBits = GetItemActivateFlags();
3047 (lParam && !lstrcmpiW((PWSTR)lParam, REGSTR_PATH_EXPLORER L"\\IconUnderline")))
3048 {
3050 ListExBits |= SHELL_GetIconUnderlineFlags();
3051 }
3052 m_ListView.SetExtendedListViewStyle(ListExBits, ListExMask);
3053 m_ListView.SendMessage(uMsg, wParam, lParam);
3054 return S_OK;
3055}
3056
3058{
3059 HMENU hmenu = (HMENU) wParam;
3060 int nPos = LOWORD(lParam);
3061 UINT menuItemId;
3062
3063 if (m_isEditing)
3065 if (m_pCM)
3066 OnMenuMessage(uMsg, wParam, lParam, bHandled);
3067
3069
3070 if (GetSelections() == 0)
3071 {
3078 }
3079 else
3080 {
3081 // FIXME: Check copyable
3088 }
3089
3090 /* Lets try to find out what the hell wParam is */
3091 if (hmenu == GetSubMenu(m_hMenu, nPos))
3092 menuItemId = ReallyGetMenuItemID(m_hMenu, nPos);
3093 else if (hViewMenu && hmenu == GetSubMenu(hViewMenu, nPos))
3094 menuItemId = ReallyGetMenuItemID(hViewMenu, nPos);
3095 else if (m_hContextMenu && hmenu == GetSubMenu(m_hContextMenu, nPos))
3096 menuItemId = ReallyGetMenuItemID(m_hContextMenu, nPos);
3097 else
3098 return FALSE;
3099
3100 switch (menuItemId)
3101 {
3102 case FCIDM_MENU_FILE:
3103 FillFileMenu();
3104 break;
3105 case FCIDM_MENU_VIEW:
3106 case FCIDM_SHVIEW_VIEW:
3108 break;
3111 break;
3112 }
3113
3114 return FALSE;
3115}
3116
3118{
3119 bHandled = TRUE;
3120 return m_ClipboardChain.HandleChangeCBChain(wParam, lParam);
3121}
3122
3124{
3125 bHandled = TRUE;
3126 const LRESULT res = m_ClipboardChain.HandleDrawClipboard(wParam, lParam);
3127 if (m_HasCutItems)
3128 {
3129 m_ClipboardChain.Unhook(m_hWnd);
3130 m_HasCutItems = false;
3131 m_ListView.SetItemState(-1, 0, LVIS_CUT); // Somebody copied or pasted, nothing can be "cut" anymore
3132 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) | LVIS_CUT, 0);
3133 }
3134 return res;
3135}
3136
3138{
3139 for (UINT i = 0, c = m_ListView.GetItemCount(); i < c; ++i)
3140 m_ListView.SetItemState(i, GetItemAttributes(i, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0, LVIS_CUT);
3141}
3142
3143// The INTERFACE of the IShellView object
3144
3146{
3147 TRACE("(%p)\n", this);
3148
3149 *phWnd = m_hWnd;
3150
3151 return S_OK;
3152}
3153
3155{
3156 FIXME("(%p) stub\n", this);
3157
3158 return E_NOTIMPL;
3159}
3160
3161// FIXME: use the accel functions
3163{
3164 if (m_isEditing)
3165 return S_FALSE;
3166
3167 if (lpmsg->message >= WM_KEYFIRST && lpmsg->message <= WM_KEYLAST)
3168 {
3169 if (::TranslateAcceleratorW(m_hWnd, m_hAccel, lpmsg) != 0)
3170 return S_OK;
3171
3172 TRACE("-- key=0x%04lx\n", lpmsg->wParam);
3173 }
3174
3175 return m_pShellBrowser ? m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0) : S_FALSE;
3176}
3177
3179{
3180 FIXME("(%p)\n", this);
3181 return E_NOTIMPL;
3182}
3183
3185{
3186 TRACE("(%p)->(state=%x)\n", this, uState);
3187
3188 // don't do anything if the state isn't changing
3189 if (m_uState == uState)
3190 return S_OK;
3191
3192 // OnActivate handles the menu merging and internal state
3193 DoActivate(uState);
3194
3195 // only do this if we are active
3196 if (uState != SVUIA_DEACTIVATE)
3197 {
3199
3200 // Set the text for the status bar
3202 }
3203
3204 return S_OK;
3205}
3206
3208{
3209 TRACE("(%p)\n", this);
3210
3212
3214 FillList();
3215
3216 return S_OK;
3217}
3218
3220{
3221 return CreateViewWindow3(psb, lpPrevView, SV3CVW3_DEFAULT,
3222 (FOLDERFLAGS)lpfs->fFlags, (FOLDERFLAGS)lpfs->fFlags, (FOLDERVIEWMODE)lpfs->ViewMode, NULL, prcView, phWnd);
3223}
3224
3226{
3227 TRACE("(%p)\n", this);
3228
3229 /* Make absolutely sure all our UI is cleaned up */
3231
3232 if (m_hAccel)
3233 {
3234 // MSDN: Accelerator tables loaded from resources are freed automatically when application terminates
3235 m_hAccel = NULL;
3236 }
3237
3239 {
3242 }
3243
3244 if (m_hMenuViewModes)
3245 {
3248 }
3249
3250 if (m_hMenu)
3251 {
3253 m_hMenu = NULL;
3254 }
3255
3256 if (m_ListView)
3257 {
3258 m_ListView.DestroyWindow();
3259 }
3260
3261 if (m_hWnd)
3262 {
3264 DestroyWindow();
3265 }
3266
3269
3270 return S_OK;
3271}
3272
3274{
3275 TRACE("(%p)->(%p) vmode=%x flags=%x\n", this, lpfs,
3277
3278 if (!lpfs)
3279 return E_INVALIDARG;
3280
3281 *lpfs = m_FolderSettings;
3282 return S_OK;
3283}
3284
3286{
3287 TRACE("(%p)->(0x%lX, %p, %p)\n", this, dwReserved, lpfn, lparam);
3288
3291 return S_OK;
3292}
3293
3295{
3296 ULONG read;
3297 HRESULT hr = pS->Read(buffer, cb, &read);
3298 return FAILED(hr) ? hr : (cb == read ? S_OK : HResultFromWin32(ERROR_MORE_DATA));
3299}
3300
3302{
3303 DWORD value;
3305 return SUCCEEDED(hr) ? value : def;
3306}
3307
3309{
3310 CLSID clsid;
3312 if (SUCCEEDED(hr))
3313 {
3314 WCHAR path[MAX_PATH], name[39];
3315 wsprintfW(path, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
3317 *ppStream = SHOpenRegStream2W(HKEY_CURRENT_USER, path, name, Stgm);
3318 hr = *ppStream ? S_OK : E_FAIL;
3319 }
3320 return hr;
3321}
3322
3324{
3326 if (FAILED(hr))
3327 return hr;
3328 if (cols.Signature != PERSISTCOLUMNS::SIG || cols.Count > cols.MAXCOUNT)
3330 return Read(pS, &cols.Columns, sizeof(*cols.Columns) * cols.Count);
3331}
3332
3334{
3336 PERSISTCOLUMNS cols;
3339 bool fallback = false;
3340 HRESULT hrColumns = E_FAIL;
3342 if (SUCCEEDED(hr))
3343 {
3344 DWORD data;
3345 if (FAILED(hr = SHPropertyBag_ReadDWORD(pPB, L"Mode", &data)))
3346 goto loadfallback;
3348 cvs.FolderSettings.fFlags = ReadDWORD(pPB, L"FFlags", FWF_NOGROUPING);
3349 data = ReadDWORD(pPB, L"Sort", ~0ul);
3351 cvs.SortDir = (INT8)ReadDWORD(pPB, L"SortDir", 1);
3352 if (SUCCEEDED(hrColumns = SHPropertyBag_ReadStream(pPB, L"ColInfo", &pS)))
3353 hrColumns = LoadColumnsStream(cols, pS);
3354 }
3355 else
3356 {
3357 if (FAILED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_READ, &pS) : E_UNEXPECTED)))
3358 {
3359 loadfallback:
3361 fallback = true;
3362 }
3363 if (FAILED(hr) || FAILED(hr = Read(pS, &cvs, sizeof(cvs))))
3364 return hr;
3365 if (cvs.Signature != cvs.SIG)
3367 hrColumns = LoadColumnsStream(cols, pS);
3368 }
3370 m_FolderSettings.fFlags &= ~cvs.VALIDFWF;
3372 if (SUCCEEDED(hrColumns))
3373 {
3374 BOOL failed = FALSE;
3375 if ((m_LoadColumnsList = DPA_Create(cols.Count)) != NULL)
3376 {
3377 for (UINT i = 0; i < cols.Count; ++i)
3378 {
3379 failed |= !DPA_SetPtr(m_LoadColumnsList, i, UlongToPtr(cols.Columns[i]));
3380 }
3381 }
3382 if (failed || !cols.Count)
3383 {
3386 }
3387 }
3390 m_sortInfo.Direction = cvs.SortDir > 0 ? 1 : -1;
3392 return hr;
3393}
3394
3396{
3397 if (!m_ListView.m_hWnd)
3398 return E_UNEXPECTED;
3401 cvs.SortColId = sortcol >= 0 ? (WORD)sortcol : 0;
3403 PERSISTCOLUMNS cols;
3405 cols.Count = 0;
3406 LVCOLUMN lvc;
3407 lvc.mask = LVCF_WIDTH;
3408 for (UINT i = 0, j = 0; i < PERSISTCOLUMNS::MAXCOUNT && ListView_GetColumn(m_ListView, j, &lvc); ++j)
3409 {
3411 if (SUCCEEDED(hr))
3412 {
3413 cols.Columns[i] = MAKELONG(hr, lvc.cx);
3414 cols.Count = ++i;
3415 }
3416 }
3417 UINT cbColumns = FIELD_OFFSET(PERSISTCOLUMNS, Columns) + (sizeof(*cols.Columns) * cols.Count);
3419
3420 IPropertyBag *pPB;
3421 HRESULT hr = S_OK;
3422 if (pStream)
3423 {
3424 pStream->AddRef();
3425 goto stream;
3426 }
3428 if (SUCCEEDED(hr))
3429 {
3430 UINT uViewMode;
3431 GetCurrentViewMode(&uViewMode);
3432 hr = SHPropertyBag_WriteDWORD(pPB, L"Mode", uViewMode);
3434 SHPropertyBag_WriteDWORD(pPB, L"Sort", cvs.SortColId);
3435 SHPropertyBag_WriteDWORD(pPB, L"SortDir", cvs.SortDir);
3436 pStream = cols.Count ? SHCreateMemStream((LPBYTE)&cols, cbColumns) : NULL;
3437 if (!pStream || FAILED(SHPropertyBag_WriteStream(pPB, L"ColInfo", pStream)))
3438 SHPropertyBag_Delete(pPB, L"ColInfo");
3439#if 0 // TODO
3441 memcpy(name, L"ItemPos", sizeof(L"ItemPos"));
3442 if (SHGetPerScreenResName(name + 7, _countof(name) - 7, 0))
3443 {
3444 if (GetAutoArrange() == S_FALSE)
3445 // TODO: Save listview item positions
3446 else
3448 }
3449#endif
3450 pPB->Release();
3451 }
3452 else if (SUCCEEDED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_WRITE, &pStream) : E_UNEXPECTED)))
3453 {
3454 stream:
3455 ULONG written;
3456 cvs.Signature = cvs.SIG;
3458 hr = pStream->Write(&cvs, sizeof(cvs), &written);
3459 if (SUCCEEDED(hr))
3460 hr = pStream->Write(&cols, cbColumns, &written);
3461 }
3462 // TODO: else if (SUCCEEDED(_DoFolderViewCB(SFVM_GETCOLUMNSTREAM)))
3463 if (pStream)
3464 pStream->Release();
3465 return hr;
3466}
3467
3469{
3471 return SaveViewState(NULL);
3472 return S_FALSE;
3473}
3474
3475#define UPDATEFOLDERVIEWFLAGS(bits, bit, set) ( (bits) = ((bits) & ~(bit)) | ((set) ? (bit) : 0) )
3477{
3481}
3482
3484{
3485 SHELLSTATE ss;
3487 return ((m_FolderSettings.fFlags & FWF_SINGLECLICKACTIVATE) || (!ss.fDoubleClickInWebView && !ss.fWin95Classic))
3489}
3490
3492{
3493 int i;
3494
3495 TRACE("(%p)->(pidl=%p, 0x%08x) stub\n", this, pidl, uFlags);
3496
3497 if (!m_ListView)
3498 {
3499 ERR("!m_ListView\n");
3500 return E_FAIL;
3501 }
3502
3503 i = LV_FindItemByPidl(pidl);
3504 if (i == -1)
3505 return S_OK;
3506
3507 LVITEMW lvItem = {0};
3508 lvItem.mask = LVIF_STATE;
3510
3511 while (m_ListView.GetItem(&lvItem))
3512 {
3513 if (lvItem.iItem == i)
3514 {
3515 if (uFlags & SVSI_SELECT)
3516 lvItem.state |= LVIS_SELECTED;
3517 else
3518 lvItem.state &= ~LVIS_SELECTED;
3519
3520 if (uFlags & SVSI_FOCUSED)
3521 lvItem.state |= LVIS_FOCUSED;
3522 else
3523 lvItem.state &= ~LVIS_FOCUSED;
3524 }
3525 else
3526 {
3527 if (uFlags & SVSI_DESELECTOTHERS)
3528 {
3529 lvItem.state &= ~LVIS_SELECTED;
3530 }
3531 lvItem.state &= ~LVIS_FOCUSED;
3532 }
3533
3534 m_ListView.SetItem(&lvItem);
3535 lvItem.iItem++;
3536 }
3537
3538 if (uFlags & SVSI_ENSUREVISIBLE)
3540
3541 if((uFlags & SVSI_EDIT) == SVSI_EDIT)
3543
3544 return S_OK;
3545}
3546
3548{
3550
3551 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
3552
3553 if (!ppvOut)
3554 return E_INVALIDARG;
3555
3556 *ppvOut = NULL;
3557
3558 switch (uItem)
3559 {
3560 case SVGIO_BACKGROUND:
3561 if (IsEqualIID(riid, IID_IContextMenu))
3562 {
3565 return hr;
3566
3567 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3568 }
3569 else if (IsEqualIID(riid, IID_IDispatch))
3570 {
3572 {
3575 return hr;
3576 }
3577 hr = m_pShellFolderViewDual->QueryInterface(riid, ppvOut);
3578 }
3579 break;
3580 case SVGIO_SELECTION:
3581 GetSelections();
3582 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, riid, 0, ppvOut);
3584 return hr;
3585
3586 if (IsEqualIID(riid, IID_IContextMenu))
3587 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3588
3589 break;
3590 }
3591
3592 TRACE("-- (%p)->(interface=%p)\n", this, *ppvOut);
3593
3594 return hr;
3595}
3596
3598{
3602 mode = temp;
3603 return mode;
3604}
3605
3607{
3608 TRACE("(%p)->(%p), stub\n", this, pViewMode);
3609
3610 if (!pViewMode)
3611 return E_INVALIDARG;
3612
3613 *pViewMode = m_FolderSettings.ViewMode;
3614 return S_OK;
3615}
3616
3618{
3619 DWORD dwStyle;
3620 TRACE("(%p)->(%u), stub\n", this, ViewMode);
3621
3622 /* It's not redundant to check FVM_AUTO because it's a (UINT)-1 */
3623 if (((INT)ViewMode < FVM_FIRST || (INT)ViewMode > FVM_LAST) && ((INT)ViewMode != FVM_AUTO))
3624 return E_INVALIDARG;
3625
3626 /* Windows before Vista uses LVM_SETVIEW and possibly
3627 LVM_SETEXTENDEDLISTVIEWSTYLE to set the style of the listview,
3628 while later versions seem to accomplish this through other
3629 means. */
3630 switch (ViewMode)
3631 {
3632 case FVM_ICON: dwStyle = LVS_ICON; break;
3633 case FVM_SMALLICON: dwStyle = LVS_SMALLICON; break;
3634 case FVM_LIST: dwStyle = LVS_LIST; break;
3635 case FVM_DETAILS: dwStyle = LVS_REPORT; break;
3636 default:
3637 FIXME("ViewMode %d not implemented\n", ViewMode);
3638 dwStyle = LVS_LIST;
3639 break;
3640 }
3641
3642 m_ListView.ModifyStyle(LVS_TYPEMASK, dwStyle);
3643
3644 /* This will not necessarily be the actual mode set above.
3645 This mimics the behavior of Windows XP. */
3646 m_FolderSettings.ViewMode = ViewMode;
3647 CheckToolbar();
3648 return S_OK;
3649}
3650
3652{
3653 if (m_pSFParent == NULL)
3654 return E_FAIL;
3655
3656 return m_pSFParent->QueryInterface(riid, ppv);
3657}
3658
3660{
3661 PCUITEMID_CHILD pidl = _PidlByItem(iItemIndex);
3662 if (pidl)
3663 {
3664 *ppidl = ILClone(pidl);
3665 return S_OK;
3666 }
3667
3668 *ppidl = 0;
3669 return E_INVALIDARG;
3670}
3671
3673{
3674 TRACE("(%p)->(%u %p)\n", this, uFlags, pcItems);
3676 FIXME("some flags unsupported, %x\n", uFlags & ~(SVGIO_ALLVIEW | SVGIO_SELECTION));
3679 else
3681 return S_OK;
3682}
3683
3685{
3686 return E_NOTIMPL;
3687}
3688
3690{
3691 TRACE("(%p)->(%p)\n", this, piItem);
3692
3693 *piItem = m_ListView.GetSelectionMark();
3694
3695 return S_OK;
3696}
3697
3699{
3700 TRACE("(%p)->(%p)\n", this, piItem);
3701
3702 *piItem = m_ListView.GetNextItem(-1, LVNI_FOCUSED);
3703
3704 return S_OK;
3705}
3706
3708{
3709 if (!m_ListView)
3710 {
3711 ERR("!m_ListView\n");
3712 return E_FAIL;
3713 }
3714
3715 int lvIndex = LV_FindItemByPidl(pidl);
3716 if (lvIndex == -1 || ppt == NULL)
3717 return E_INVALIDARG;
3718
3719 m_ListView.GetItemPosition(lvIndex, ppt);
3720 return S_OK;
3721}
3722
3724{
3725 TRACE("(%p)->(%p)\n", this, ppt);
3726
3727 if (!m_ListView)
3728 {
3729 ERR("!m_ListView\n");
3730 return S_FALSE;
3731 }
3732
3733 if (ppt)
3734 {
3735 SIZE spacing;
3736 m_ListView.GetItemSpacing(spacing);
3737
3738 ppt->x = spacing.cx;
3739 ppt->y = spacing.cy;
3740 }
3741
3742 return S_OK;
3743}
3744
3746{
3747 return E_NOTIMPL;
3748}
3749
3751{
3752 return ((m_ListView.GetStyle() & LVS_AUTOARRANGE) ? S_OK : S_FALSE);
3753}
3754
3756{
3757 DWORD dwExStyle = (DWORD)m_ListView.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
3758 return ((dwExStyle & LVS_EX_SNAPTOGRID) ? S_OK : S_FALSE);
3759}
3760
3762{
3763 LVITEMW lvItem;
3764
3765 TRACE("(%p)->(%d, %x)\n", this, iItem, dwFlags);
3766
3767 lvItem.state = 0;
3768 lvItem.stateMask = LVIS_SELECTED;
3769
3770 if (dwFlags & SVSI_ENSUREVISIBLE)
3771 m_ListView.EnsureVisible(iItem, 0);
3772
3773 /* all items */
3774 if (dwFlags & SVSI_DESELECTOTHERS)
3776
3777 /* this item */
3778 if (dwFlags & SVSI_SELECT)
3779 lvItem.state |= LVIS_SELECTED;
3780
3781 if (dwFlags & SVSI_FOCUSED)
3782 lvItem.stateMask |= LVIS_FOCUSED;
3783
3784 m_ListView.SetItemState(iItem, lvItem.state, lvItem.stateMask);
3785
3786 if ((dwFlags & SVSI_EDIT) == SVSI_EDIT)
3787 m_ListView.EditLabel(iItem);
3788
3789 return S_OK;
3790}
3791
3793{
3795 m_ListView.SetItemState(-1, 0, LVIS_SELECTED); // Reset the selection
3796 for (UINT i = 0 ; i < cidl; i++)
3797 {
3798 int lvIndex = LV_FindItemByPidl(apidl[i]);
3799 if (lvIndex != -1)
3800 SelectAndPositionItem(lvIndex, dwFlags, apt ? &apt[i] : NULL);
3801 }
3802 return S_OK;
3803}
3804
3805
3806// IShellView2 implementation
3807
3809{
3810 if (view_type == SV2GV_DEFAULTVIEW)
3811 {
3812 *pVid = VID_Default;
3813 return S_OK;
3814 }
3815 if (view_type == SV2GV_CURRENTVIEW)
3817 if ((int)view_type < 0)
3818 return E_UNEXPECTED;
3819
3822 return E_INVALIDARG;
3824 return S_OK;
3825}
3826
3828{
3829 return CreateViewWindow3(view_params->psbOwner, view_params->psvPrev,
3830 SV3CVW3_DEFAULT, (FOLDERFLAGS)view_params->pfs->fFlags, (FOLDERFLAGS)view_params->pfs->fFlags,
3831 (FOLDERVIEWMODE)view_params->pfs->ViewMode, view_params->pvid, view_params->prcView, &view_params->hwndView);
3832}
3833
3835{
3836 OLEMENUGROUPWIDTHS omw = { { 0, 0, 0, 0, 0, 0 } };
3837 const UINT SUPPORTED_SV3CVW3 = SV3CVW3_FORCEVIEWMODE | SV3CVW3_FORCEFOLDERFLAGS;
3838 const UINT IGNORE_FWF = FWF_OWNERDATA; // FIXME: Support this
3839
3840 *hwnd = NULL;
3841
3842 TRACE("(%p)->(shlview=%p shlbrs=%p rec=%p hwnd=%p vmode=%x flags=%x)\n", this, psvPrevious, psb, prcView, hwnd, mode, flags);
3843 if (prcView != NULL)
3844 TRACE("-- left=%i top=%i right=%i bottom=%i\n", prcView->left, prcView->top, prcView->right, prcView->bottom);
3845
3846 /* Validate the Shell Browser */
3847 if (psb == NULL || m_hWnd)
3848 return E_UNEXPECTED;
3849
3850 if (view_flags & ~SUPPORTED_SV3CVW3)
3851 FIXME("unsupported view flags 0x%08x\n", view_flags & ~SUPPORTED_SV3CVW3);
3852
3853 /* Set up the member variables */
3854 m_pShellBrowser = psb;
3856 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3857
3858 if (view_id)
3859 {
3862 mode = temp;
3863 else if (*view_id == VID_Default)
3864 mode = FVM_AUTO;
3865 else
3866 FIXME("Ignoring unrecognized VID %s\n", debugstr_guid(view_id));
3867 }
3868 if (mode == FVM_AUTO)
3870
3872 {
3874 ? "unsupported" : "invalid", m_FolderSettings.ViewMode);
3876 }
3877 const UINT requestedViewMode = m_FolderSettings.ViewMode;
3878
3879 /* Get our parent window */
3880 m_pShellBrowser->GetWindow(&m_hWndParent);
3882
3883 /* Try to get the ICommDlgBrowserInterface, adds a reference !!! */
3886 {
3887 TRACE("-- CommDlgBrowser\n");
3888 }
3889
3890 LoadViewState();
3891 if (view_flags & SV3CVW3_FORCEVIEWMODE)
3892 m_FolderSettings.ViewMode = requestedViewMode;
3893 if (view_flags & SV3CVW3_FORCEFOLDERFLAGS)
3894 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3895
3896 RECT rcView = *prcView;
3898 if (m_hWnd == NULL)
3899 return E_FAIL;
3900
3901 *hwnd = m_hWnd;
3902
3903 CheckToolbar();
3904
3905 if (!*hwnd)
3906 return E_FAIL;
3907
3909
3911 UpdateWindow();
3912
3913 if (!m_hMenu)
3914 {
3915 m_hMenu = CreateMenu();
3916 m_pShellBrowser->InsertMenusSB(m_hMenu, &omw);
3917 TRACE("-- after fnInsertMenusSB\n");
3918 }
3919
3920 _MergeToolbar();
3921
3922 return S_OK;
3923}
3924
3926{
3927 if (!pidl)
3928 {
3930 if (idx < 0)
3932 pidl = _PidlByItem(idx);
3933 }
3934 if (ILFindLastID(pidl) != pidl)
3935 return E_INVALIDARG;
3936 return SelectItem(pidl, SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT);
3937}
3938
3940{
3941 if (Idx == -1)
3942 return fSVSI == SVSI_DESELECTOTHERS ? SelectItem(-2, fSVSI) : E_INVALIDARG;
3943 if (ppt)
3944 m_ListView.SetItemPosition(Idx, ppt);
3945 return SelectItem(Idx, fSVSI); // After SetItemPosition for SVSI_ENSUREVISIBLE
3946}
3947
3949{
3950 if (!item)
3951 return SelectAndPositionItem(-1, flags, point);
3952 int idx = LV_FindItemByPidl(item);
3953 return idx != -1 ? SelectAndPositionItem(idx, flags, point) : S_FALSE;
3954}
3955
3956// IShellFolderView implementation
3957
3959{
3960 _Sort(LOWORD(sort & SHCIDS_COLUMNMASK));
3961 return S_OK;
3962}
3963
3965{
3966 int col = m_sortInfo.ListColumn;
3967 *sort = col != LISTVIEW_SORT_INFO::UNSPECIFIEDCOLUMN ? col : 0;
3969}
3970
3972{
3974 return S_OK;
3975}
3976
3978{
3979 m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
3981 return S_OK;
3982}
3983
3985{
3986 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3987 if (!m_ListView)
3988 {
3989 ERR("!m_ListView\n");
3990 return E_FAIL;
3991 }
3992 *item = LV_AddItem(pidl);
3993 return (int)*item >= 0 ? S_OK : E_OUTOFMEMORY;
3994}
3995
3997{
3998 TRACE("(%p)->(%p %d)\n", this, pidl, item);
3999 return Item(item, pidl);
4000}
4001
4003{
4004 TRACE("(%p)->(%p %p)\n", this, pidl, item);
4005
4006 if (!m_ListView)
4007 {
4008 ERR("!m_ListView\n");
4009 return E_FAIL;
4010 }
4011
4012 if (pidl)
4013 {
4016 }
4017 else
4018 {
4019 *item = 0;
4021 }
4022
4023 return S_OK;
4024}
4025
4027{
4028 TRACE("(%p)->(%p)\n", this, count);
4030 return S_OK;
4031}
4032
4034{
4035 FIXME("(%p)->(%d %x) stub\n", this, count, flags);
4036 return E_NOTIMPL;
4037}
4038
4040{
4041 FIXME("(%p)->(%p %p %p) stub\n", this, pidl_old, pidl_new, item);
4042 return E_NOTIMPL;
4043}
4044
4046{
4047 FIXME("(%p)->(%p %p) stub\n", this, pidl, item);
4048 return E_NOTIMPL;
4049}
4050
4052{
4053 TRACE("(%p)->(%d)\n", this, redraw);
4054 if (m_ListView)
4056 return S_OK;
4057}
4058
4060{
4062 return S_OK;
4063}
4064
4066{
4067 TRACE("(%p)->(%p %p)\n", this, pidl, items);
4068
4069 *items = GetSelections();
4070
4071 if (*items)
4072 {
4073 *pidl = static_cast<PCUITEMID_CHILD *>(LocalAlloc(0, *items * sizeof(PCUITEMID_CHILD)));
4074 if (!*pidl)
4075 {
4076 return E_OUTOFMEMORY;
4077 }
4078
4079 // It's documented that caller shouldn't free the PIDLs, only the array itself
4080 memcpy(*pidl, m_apidl, *items * sizeof(PCUITEMID_CHILD));
4081 }
4082
4083 return S_OK;
4084}
4085
4087{
4088 if ((m_iDragOverItem == -1 || m_pCurDropTarget == NULL) &&
4090 {
4091 return S_OK;
4092 }
4093
4094 return S_FALSE;
4095}
4096
4098{
4099 if (!pt)
4100 return E_INVALIDARG;
4101
4103 return S_OK;
4104}
4105
4107{
4108 FIXME("(%p)->(%p) stub\n", this, pt);
4109 return E_NOTIMPL;
4110}
4111
4113{
4114 TRACE("(%p)->(%p)\n", this, obj);
4115 return E_NOTIMPL;
4116}
4117
4119{
4120 FIXME("(%p)->(%p %p) stub\n", this, pidl, pt);
4121 return E_NOTIMPL;
4122}
4123
4125{
4126 FIXME("(%p)->(%p) stub\n", this, drop_target);
4127 return E_NOTIMPL;
4128}
4129
4131{
4132 if (!move)
4133 return S_OK;
4134
4135 UINT CutCount = 0;
4136 for (int i = -1; (i = m_ListView.GetNextItem(i, LVNI_SELECTED)) != -1;)
4137 {
4138 if (!CutCount++)
4139 {
4140 // Turn off the LVIS_CUT LVM_SETCALLBACKMASK optimization
4141 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) & ~LVIS_CUT, 0);
4143 }
4145 }
4146 if (CutCount)
4147 {
4149 m_HasCutItems = true;
4150 }
4151 return S_OK;
4152}
4153
4155{
4156 FIXME("(%p)->(%p) stub\n", this, obj);
4157 return E_NOTIMPL;
4158}
4159
4161{
4162 FIXME("(%p)->(%p) stub\n", this, spacing);
4163 return E_NOTIMPL;
4164}
4165
4166HRESULT STDMETHODCALLTYPE CDefView::SetCallback(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb)
4167{
4168 if (old_cb)
4169 *old_cb = m_pShellFolderViewCB.Detach();
4170
4171 m_pShellFolderViewCB = new_cb;
4173 if (new_cb)
4174 new_cb->QueryInterface(IID_PPV_ARG(IFolderFilter, &m_pFolderFilter));
4175 return S_OK;
4176}
4177
4179{
4180 FIXME("(%p)->(%d) stub\n", this, flags);
4181 return E_NOTIMPL;
4182}
4183
4185{
4186 TRACE("(%p)->(%p)\n", this, support);
4187 return S_OK;
4188}
4189
4191{
4192 FIXME("(%p)->(%p) stub\n", this, disp);
4193 return E_NOTIMPL;
4194}
4195
4196HRESULT WINAPI CDefView::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
4197{
4198 FIXME("(%p)->(%p(%s) 0x%08x %p %p\n",
4199 this, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
4200
4201 if (!prgCmds)
4202 return E_INVALIDARG;
4203
4204 for (UINT i = 0; i < cCmds; i++)
4205 {
4206 FIXME("\tprgCmds[%d].cmdID = %d\n", i, prgCmds[i].cmdID);
4207 prgCmds[i].cmdf = 0;
4208 }
4209
4210 return OLECMDERR_E_UNKNOWNGROUP;
4211}
4212
4214// ISVOleCmdTarget_Exec(IOleCommandTarget)
4215//
4216// nCmdID is the OLECMDID_* enumeration
4217HRESULT WINAPI CDefView::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
4218{
4219 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n",
4220 this, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
4221
4222 if (!pguidCmdGroup)
4223 return OLECMDERR_E_UNKNOWNGROUP;
4224
4225 if (IsEqualCLSID(*pguidCmdGroup, m_Category))
4226 {
4227 if (nCmdID == FCIDM_SHVIEW_AUTOARRANGE)
4228 {
4229 if (V_VT(pvaIn) != VT_INT_PTR)
4230 return OLECMDERR_E_NOTSUPPORTED;
4231
4233 params.cbSize = sizeof(params);
4234 params.rcExclude = *(RECT*) V_INTREF(pvaIn);
4235
4236 if (m_hMenuViewModes)
4237 {
4238 // Duplicate all but the last two items of the view modes menu
4239 HMENU hmenuViewPopup = CreatePopupMenu();
4240 Shell_MergeMenus(hmenuViewPopup, m_hMenuViewModes, 0, 0, 0xFFFF, 0);
4241 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4242 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4243 CheckViewMode(hmenuViewPopup);
4244 TrackPopupMenuEx(hmenuViewPopup, TPM_LEFTALIGN | TPM_TOPALIGN, params.rcExclude.left, params.rcExclude.bottom, m_hWndParent, &params);
4245 ::DestroyMenu(hmenuViewPopup);
4246 }
4247
4248 // pvaOut is VT_I4 with value 0x403 (cmd id of the new mode maybe?)
4249 V_VT(pvaOut) = VT_I4;
4250 V_I4(pvaOut) = 0x403;
4251 }
4252 }
4253
4254 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer) &&
4255 (nCmdID == 0x29) &&
4256 (nCmdexecopt == 4) && pvaOut)
4257 return S_OK;
4258
4259 if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView) &&
4260 (nCmdID == 9) &&
4261 (nCmdexecopt == 0))
4262 return 1;
4263
4264 if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
4265 {
4266 CComPtr<IStream> pStream;
4267 WCHAR SubKey[MAX_PATH];
4268 switch (nCmdID)
4269 {
4271 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4273 SaveViewState(pStream);
4274 return S_OK;
4276 PathCombineW(SubKey, REGSTR_PATH_EXPLORER, L"Streams\\Default");
4278 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4279 m_FolderSettings.fFlags |= FWF_NOBROWSERVIEWSTATE; // Don't let this folder save itself
4280 return S_OK;
4281 }
4282 }
4283
4284 return OLECMDERR_E_UNKNOWNGROUP;
4285}
4286
4287/**********************************************************
4288 * ISVDropTarget implementation
4289 */
4290
4291/******************************************************************************
4292 * drag_notify_subitem [Internal]
4293 *
4294 * Figure out the shellfolder object, which is currently under the mouse cursor
4295 * and notify it via the IDropTarget interface.
4296 */
4297
4298#define SCROLLAREAWIDTH 20
4299
4301{
4302 LONG lResult;
4303 HRESULT hr;
4304 RECT clientRect;
4305
4306 /* The key state on drop doesn't have MK_LBUTTON or MK_RBUTTON because it
4307 reflects the key state after the user released the button, so we need
4308 to remember the last key state when the button was pressed */
4309 m_grfKeyState = grfKeyState;
4310
4311 // Map from global to client coordinates and query the index of the
4312 // listview-item, which is currently under the mouse cursor.
4313 LVHITTESTINFO htinfo = {{pt.x, pt.y}, LVHT_ONITEM};
4314 ScreenToClient(&htinfo.pt);
4315 lResult = m_ListView.HitTest(&htinfo);
4316
4317 /* Send WM_*SCROLL messages every 250 ms during drag-scrolling */
4318 ::GetClientRect(m_ListView, &clientRect);
4319 if (htinfo.pt.x == m_ptLastMousePos.x && htinfo.pt.y == m_ptLastMousePos.y &&
4320 (htinfo.pt.x < SCROLLAREAWIDTH || htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH ||
4321 htinfo.pt.y < SCROLLAREAWIDTH || htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH))
4322 {
4323 m_cScrollDelay = (m_cScrollDelay + 1) % 5; // DragOver is called every 50 ms
4324 if (m_cScrollDelay == 0)
4325 {
4326 /* Mouse did hover another 250 ms over the scroll-area */
4327 if (htinfo.pt.x < SCROLLAREAWIDTH)
4328 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEUP, 0);
4329
4330 if (htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH)
4331 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEDOWN, 0);
4332
4333 if (htinfo.pt.y < SCROLLAREAWIDTH)
4334 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEUP, 0);
4335
4336 if (htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH)
4337 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEDOWN, 0);
4338 }
4339 }
4340 else
4341 {
4342 m_cScrollDelay = 0; // Reset, if cursor is not over the listview's scroll-area
4343 }
4344
4345 m_ptLastMousePos = htinfo.pt;
4347
4348 /* We need to check if we drag the selection over itself */
4349 if (lResult != -1 && m_pSourceDataObject.p != NULL)
4350 {
4351 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4352
4353 for (UINT i = 0; i < m_cidl; i++)
4354 {
4355 if (pidl == m_apidl[i])
4356 {
4357 /* The item that is being draged is hovering itself. */
4358 lResult = -1;
4359 break;
4360 }
4361 }
4362 }
4363
4364 // If we are still over the previous sub-item, notify it via DragOver and return
4365 if (m_pCurDropTarget && lResult == m_iDragOverItem)
4366 return m_pCurDropTarget->DragOver(grfKeyState, pt, pdwEffect);
4367
4368 // We've left the previous sub-item, notify it via DragLeave and release it
4369 if (m_pCurDropTarget)
4370 {
4372 if (pidl)
4373 SelectItem(pidl, 0);
4374
4375 m_pCurDropTarget->DragLeave();
4377 }
4378
4379 m_iDragOverItem = lResult;
4380
4381 if (lResult == -1)
4382 {
4383 // We are not above one of the listview's subitems. Bind to the
4384 // parent folder's DropTarget interface.
4386 }
4387 else
4388 {
4389 // Query the relative PIDL of the shellfolder object represented
4390 // by the currently dragged over listview-item ...
4391 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4392
4393 // ... and bind m_pCurDropTarget to the IDropTarget interface of an UIObject of this object
4394 hr = m_pSFParent->GetUIObjectOf(m_ListView, 1, &pidl, IID_NULL_PPV_ARG(IDropTarget, &m_pCurDropTarget));
4395 }
4396
4398
4399 // If anything failed, m_pCurDropTarget should be NULL now, which ought to be a save state
4400 if (FAILED(hr))
4401 {
4402 *pdwEffect = DROPEFFECT_NONE;
4403 return hr;
4404 }
4405
4406 if (m_iDragOverItem != -1)
4407 {
4408 SelectItem(m_iDragOverItem, SVSI_SELECT);
4409 }
4410
4411 // Notify the item just entered via DragEnter
4412 return m_pCurDropTarget->DragEnter(m_pCurDataObject, grfKeyState, pt, pdwEffect);
4413}
4414
4415HRESULT WINAPI CDefView::DragEnter(IDataObject *pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
4416{
4417 if (*pdwEffect == DROPEFFECT_NONE)
4418 return S_OK;
4419
4420 /* Get a hold on the data object for later calls to DragEnter on the sub-folders */
4421 m_pCurDataObject = pDataObject;
4422
4423 HRESULT hr = drag_notify_subitem(grfKeyState, pt, pdwEffect);
4424 if (SUCCEEDED(hr))
4425 {
4426 POINT ptClient = {pt.x, pt.y};
4427 ScreenToClient(&ptClient);
4428 ImageList_DragEnter(m_hWnd, ptClient.x, ptClient.y);
4429 }
4430
4431 return hr;
4432}
4433
4435{
4436 POINT ptClient = {pt.x, pt.y};
4437 ScreenToClient(&ptClient);
4438 ImageList_DragMove(ptClient.x, ptClient.y);
4439 return drag_notify_subitem(grfKeyState, pt, pdwEffect);
4440}
4441
4443{
4445
4446 if (m_pCurDropTarget)
4447 {
4448 m_pCurDropTarget->DragLeave();
4450 }
4451
4452 if (m_pCurDataObject != NULL)
4453 {
4455 }
4456
4457 m_iDragOverItem = 0;
4458
4459 return S_OK;
4460}
4461
4463{
4464 RECT rcBound;
4465 INT i, nCount = m_ListView.GetItemCount();
4466 DWORD dwSpacing;
4467 INT dx, dy;
4468 BOOL bSmall = ((m_ListView.GetStyle() & LVS_TYPEMASK) != LVS_ICON);
4469
4470 // FIXME: LVM_GETORIGIN is broken. See CORE-17266
4471 pt.x += m_ListView.GetScrollPos(SB_HORZ);
4472 pt.y += m_ListView.GetScrollPos(SB_VERT);
4473
4474 if (m_ListView.GetStyle() & LVS_ALIGNLEFT)
4475 {
4476 // vertically
4477 for (i = 0; i < nCount; ++i)
4478 {
4479 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4480 dx = LOWORD(dwSpacing);
4481 dy = HIWORD(dwSpacing);
4483 rcBound.right = rcBound.left + dx;
4484 rcBound.bottom = rcBound.top + dy;
4485 if (pt.x < rcBound.right && pt.y < (rcBound.top + rcBound.bottom) / 2)
4486 {
4487 return i;
4488 }
4489 }
4490 for (i = nCount - 1; i >= 0; --i)
4491 {
4493 if (rcBound.left < pt.x && rcBound.top < pt.y)
4494 {
4495 return i + 1;
4496 }
4497 }
4498 }
4499 else
4500 {
4501 // horizontally
4502 for (i = 0; i < nCount; ++i)
4503 {
4504 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4505 dx = LOWORD(dwSpacing);
4506 dy = HIWORD(dwSpacing);
4508 rcBound.right = rcBound.left + dx;
4509 rcBound.bottom = rcBound.top + dy;
4510 if (pt.y < rcBound.bottom && pt.x < rcBound.left)
4511 {
4512 return i;
4513 }
4514 if (pt.y < rcBound.bottom && pt.x < rcBound.right)
4515 {
4516 return i + 1;
4517 }
4518 }
4519 for (i = nCount - 1; i >= 0; --i)
4520 {
4522 if (rcBound.left < pt.x && rcBound.top < pt.y)
4523 {
4524 return i + 1;
4525 }
4526 }
4527 }
4528
4529 return nCount;
4530}
4531
4533{
4534 LRESULT lResult;
4535
4536 if (!m_isFullStatusBar)
4537 {
4538 int nPartArray[] = {-1};
4539 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4540 return;
4541 }
4542
4543 int nFileSizePartLength = 125;
4544 const int nLocationPartLength = 150;
4545 const int nRightPartsLength = nFileSizePartLength + nLocationPartLength;
4546 int nObjectsPartLength = nWidth - nRightPartsLength;
4547
4548 // If the window is small enough just divide each part into thirds
4549 // to match the behavior of Windows Server 2003
4550 if (nObjectsPartLength <= nLocationPartLength)
4551 nObjectsPartLength = nFileSizePartLength = nWidth / 3;
4552
4553 int nPartArray[] = {nObjectsPartLength, nObjectsPartLength + nFileSizePartLength, -1};
4554
4555 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4556}
4557
4559{
4560 // Get the handle for the status bar
4561 HWND fStatusBar;
4562 m_pShellBrowser->GetControlWindow(FCW_STATUS, &fStatusBar);
4563
4564 // Get the size of our status bar
4565 RECT statusBarSize;
4566 ::GetWindowRect(fStatusBar, &statusBarSize);
4567
4568 // Resize the status bar
4569 _HandleStatusBarResize(statusBarSize.right - statusBarSize.left);
4570}
4571
4573
4574static INT CALLBACK
4575SelectionMoveCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
4576{
4577 CLParamIndexMap *pmap = (CLParamIndexMap *)lParamSort;
4578 INT i1 = pmap->Lookup(lParam1), i2 = pmap->Lookup(lParam2);
4579 if (i1 < i2)
4580 return -1;
4581 if (i1 > i2)
4582 return 1;
4583 return 0;
4584}
4585
4587{
4588 // get insertable index from position
4590
4591 // create identity mapping of indexes
4593 INT nCount = m_ListView.GetItemCount();
4594 for (INT i = 0; i < nCount; ++i)
4595 {
4596 array.Add(i);
4597 }
4598
4599 // re-ordering mapping
4600 INT iItem = -1;
4601 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4602 {
4603 INT iFrom = iItem, iTo = iPosition;
4604 if (iFrom < iTo)
4605 --iTo;
4606 if (iFrom >= nCount)
4607 iFrom = nCount - 1;
4608 if (iTo >= nCount)
4609 iTo = nCount - 1;
4610
4611 // shift indexes by swapping (like a bucket relay)
4612 if (iFrom < iTo)
4613 {
4614 for (INT i = iFrom; i < iTo; ++i)
4615 {
4616 // swap array[i] and array[i + 1]
4617 INT tmp = array[i];
4618 array[i] = array[i + 1];
4619 array[i + 1] = tmp;
4620 }
4621 }
4622 else
4623 {
4624 for (INT i = iFrom; i > iTo; --i)
4625 {
4626 // swap array[i] and array[i - 1]
4627 INT tmp = array[i];
4628 array[i] = array[i - 1];
4629 array[i - 1] = tmp;
4630 }
4631 }
4632 }
4633
4634 // create mapping (ListView's lParam to index) from array
4636 for (INT i = 0; i < nCount; ++i)
4637 {
4639 map.Add(lParam, i);
4640 }
4641
4642 // finally sort
4644}
4645
4646HRESULT WINAPI CDefView::Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
4647{
4650
4651 if ((IsDropOnSource(NULL) == S_OK) &&
4652 (*pdwEffect & DROPEFFECT_MOVE) &&
4654 {
4655 if (m_pCurDropTarget)
4656 {
4657 m_pCurDropTarget->DragLeave();
4659 }
4660
4661 POINT ptDrop = { pt.x, pt.y };
4662 ::ScreenToClient(m_ListView, &ptDrop);
4664 m_ptLastMousePos = ptDrop;
4665
4667 if (m_ListView.GetStyle() & LVS_AUTOARRANGE)
4668 {
4670 }
4671 else
4672 {
4673 POINT ptItem;
4674 INT iItem = -1;
4675 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4676 {
4677 if (m_ListView.GetItemPosition(iItem, &ptItem))
4678 {
4681 m_ListView.SetItemPosition(iItem, &ptItem);
4682 }
4683 }
4684 }
4686 }
4687 else if (m_pCurDropTarget)
4688 {
4689 m_pCurDropTarget->Drop(pDataObject, grfKeyState, pt, pdwEffect);
4691 }
4692
4694 m_iDragOverItem = 0;
4695 return S_OK;
4696}
4697
4699{
4700 TRACE("(%p)\n", this);
4701
4702 if (fEscapePressed)
4703 return DRAGDROP_S_CANCEL;
4704 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
4705 return DRAGDROP_S_DROP;
4706 else
4707 return S_OK;
4708}
4709
4711{
4712 TRACE("(%p)\n", this);
4713
4715}
4716
4717HRESULT 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)
4718{
4719 FIXME("Stub: this=%p\n", this);
4720 return E_NOTIMPL;
4721}
4722
4723HRESULT WINAPI CDefView::GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDevice, LOGPALETTE **ppColorSet)
4724{
4725 FIXME("Stub: this=%p\n", this);
4726 return E_NOTIMPL;
4727}
4728
4729HRESULT WINAPI CDefView::Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze)
4730{
4731 FIXME("Stub: this=%p\n", this);
4732 return E_NOTIMPL;
4733}
4734
4736{
4737 FIXME("Stub: this=%p\n", this);
4738 return E_NOTIMPL;
4739}
4740
4742{
4743 FIXME("partial stub: %p 0x%08x 0x%08x %p\n", this, aspects, advf, pAdvSink);
4744
4745 // FIXME: we set the AdviseSink, but never use it to send any advice
4746 m_pAdvSink = pAdvSink;
4747 m_dwAspects = aspects;
4748 m_dwAdvf = advf;
4749
4750 return S_OK;
4751}
4752
4754{
4755 TRACE("this=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n", this, pAspects, pAdvf, ppAdvSink);
4756
4757 if (ppAdvSink)
4758 {
4759 *ppAdvSink = m_pAdvSink;
4760 m_pAdvSink.p->AddRef();
4761 }
4762
4763 if (pAspects)
4764 *pAspects = m_dwAspects;
4765
4766 if (pAdvf)
4767 *pAdvf = m_dwAdvf;
4768
4769 return S_OK;
4770}
4771
4773{
4774 if (IsEqualIID(guidService, SID_SFolderView))
4775 return QueryInterface(riid, ppvObject);
4776 return m_pShellBrowser ? IUnknown_QueryService(m_pShellBrowser, guidService, riid, ppvObject) : E_NOINTERFACE;
4777}
4778
4780{
4782 HRESULT hr = S_OK;
4783
4784 hr = IUnknown_QueryService(m_pShellBrowser, IID_IExplorerToolbar, IID_PPV_ARG(IExplorerToolbar, &ptb));
4785 if (FAILED(hr))
4786 return hr;
4787
4788 m_Category = CGID_DefViewFrame;
4789
4790 hr = ptb->SetCommandTarget(static_cast<IOleCommandTarget*>(this), &m_Category, 0);
4791 if (FAILED(hr))
4792 return hr;
4793
4794 if (hr == S_FALSE)
4795 return S_OK;
4796
4797#if 0
4798 hr = ptb->AddButtons(&m_Category, buttonsCount, buttons);
4799 if (FAILED(hr))
4800 return hr;
4801#endif
4802
4803 return S_OK;
4804}
4805
4807{
4809
4811 {
4812 hr = m_pShellFolderViewCB->MessageSFVCB(uMsg, wParam, lParam);
4813 }
4814
4815 return hr;
4816}
4817
4819{
4820 return ShellObjectCreatorInit<CDefView>(pFolder, riid, ppvOut);
4821}
4822
4824{
4826 HRESULT hRes;
4827
4828 if (!ppsv)
4829 return E_INVALIDARG;
4830
4831 *ppsv = NULL;
4832
4833 if (!pcsfv || pcsfv->cbSize != sizeof(*pcsfv))
4834 return E_INVALIDARG;
4835
4836 TRACE("sf=%p outer=%p callback=%p\n",
4837 pcsfv->pshf, pcsfv->psvOuter, pcsfv->psfvcb);
4838
4839 hRes = CDefView_CreateInstance(pcsfv->pshf, IID_PPV_ARG(IShellView, &psv));
4840 if (FAILED(hRes))
4841 return hRes;
4842
4843 if (pcsfv->psfvcb)
4844 {
4846 if (SUCCEEDED(psv->QueryInterface(IID_PPV_ARG(IShellFolderView, &sfv))))
4847 {
4848 sfv->SetCallback(pcsfv->psfvcb, NULL);
4849 }
4850 }
4851
4852 *ppsv = psv.Detach();
4853 return hRes;
4854}
static HDC hDC
Definition: 3dtext.c:33
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
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:102
HRESULT ShellViewIdToFolderViewMode(const SHELLVIEWID *pVid)
static BOOL AppendMenuItem(HMENU hMenu, UINT MF, UINT Id, LPCWSTR String, SIZE_T Data=0)
Definition: CDefView.cpp:155
#define GET_WM_COMMAND_HWND(wp, lp)
Definition: CDefView.cpp:596
static SIZE_T GetMenuItemDataById(HMENU hMenu, UINT Id)
Definition: CDefView.cpp:168
CSimpleMap< LPARAM, INT > CLParamIndexMap
Definition: CDefView.cpp:4572
#define SCROLLAREAWIDTH
Definition: CDefView.cpp:4298
static BOOL ILIsParentOrSpecialParent(PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2)
Definition: CDefView.cpp:2911
void(CALLBACK * PFNSHGETSETTINGSPROC)(LPSHELLFLAGSTATE lpsfs, DWORD dwMask)
Definition: CDefView.cpp:599
static COLORREF GetViewColor(COLORREF Clr, UINT SysFallback)
Definition: CDefView.cpp:213
#define GET_WM_COMMAND_ID(wp, lp)
Definition: CDefView.cpp:595
#define CONTEXT_MENU_BASE_ID
Definition: CDefView.cpp:80
#define UPDATEFOLDERVIEWFLAGS(bits, bit, set)
Definition: CDefView.cpp:3475
HRESULT CDefView_CreateInstance(IShellFolder *pFolder, REFIID riid, LPVOID *ppvOut)
Definition: CDefView.cpp:4818
#define ID_LISTVIEW
Definition: CDefView.cpp:592
static HRESULT LoadColumnsStream(PERSISTCOLUMNS &cols, IStream *pS)
Definition: CDefView.cpp:3323
#define GET_WM_COMMAND_CMD(wp, lp)
Definition: CDefView.cpp:597
static UINT ReallyGetMenuItemID(HMENU hmenu, int i)
Definition: CDefView.cpp:190
static INT CALLBACK SelectionMoveCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
Definition: CDefView.cpp:4575
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4823
static DWORD ReadDWORD(IPropertyBag *pPB, LPCWSTR name, DWORD def)
Definition: CDefView.cpp:3301
static HMENU GetSubmenuByID(HMENU hmenu, UINT id)
Definition: CDefView.cpp:179
static VOID DrawTileBitmap(HDC hDC, LPCRECT prc, HBITMAP hbm, INT nWidth, INT nHeight, INT dx, INT dy)
Definition: CDefView.cpp:1690
static HRESULT SHGetLVColumnSubItem(HWND List, UINT Col)
Definition: CDefView.cpp:1010
static void ClientToListView(HWND hwndLV, POINT *ppt)
Definition: CDefView.cpp:117
const SHELLVIEWID * FolderViewModeToShellViewId(UINT FVM)
#define VID_Default
Definition: CDefView.cpp:218
static UINT CalculateCharWidth(HWND hwnd)
Definition: CDefView.cpp:199
static BOOL SelectExtOnRename(void)
Definition: CDefView.cpp:2640
@ DEFVIEW_ARRANGESORT_MAX
Definition: CDefView.cpp:48
@ DVIDM_CONTEXTMENU_LAST
Definition: CDefView.cpp:53
@ 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:57
@ DVIDM_COMMDLG_SELECT
Definition: CDefView.cpp:51
PCSTR MapFcidmCmdToVerb(_In_ UINT_PTR CmdId)
static HRESULT WINAPI DisplayNameOfW(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwFlags, _Out_ LPWSTR pszBuf, _In_ UINT cchBuf)
Definition: CFindFolder.cpp:15
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
#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
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended)
Definition: query.c:292
#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
#define SHV_CHANGE_NOTIFY
Definition: brfolder.cpp:20
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:4646
STDMETHOD() Unfreeze(DWORD dwFreeze) override
Definition: CDefView.cpp:4735
HMENU m_hMenu
Definition: CDefView.cpp:247
HRESULT LoadColumn(UINT FoldCol, UINT ListCol, BOOL Insert, UINT ForceWidth=0)
Definition: CDefView.cpp:1085
DWORD GetCommDlgViewFlags()
Definition: CDefView.cpp:365
LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1640
CComPtr< IShellFolder > m_pSFParent
Definition: CDefView.cpp:235
LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2536
STDMETHOD() GetAutoArrange() override
Definition: CDefView.cpp:3750
void RefreshGhostedState()
Definition: CDefView.cpp:3137
LRESULT OnChangeCBChain(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3117
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2516
HRESULT OnStateChange(UINT uFlags)
Definition: CDefView.cpp:702
HDPA m_LoadColumnsList
Definition: CDefView.cpp:256
static INT CALLBACK fill_list(LPVOID ptr, LPVOID arg)
Definition: CDefView.cpp:1521
CComPtr< IShellDetails > m_pSDParent
Definition: CDefView.cpp:237
STDMETHOD() DestroyViewWindow() override
Definition: CDefView.cpp:3225
LRESULT OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1738
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2250
int LV_AddItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1376
STDMETHOD() SetItemPos(PCUITEMID_CHILD pidl, POINT *pt) override
Definition: CDefView.cpp:4118
UINT GetItemActivateFlags()
Definition: CDefView.cpp:3483
BOOL IsSpecialFolder(int &csidl) const
Definition: CDefView.cpp:300
bool m_ScheduledStatusbarUpdate
Definition: CDefView.cpp:280
HRESULT FillFileMenu()
Definition: CDefView.cpp:1850
STDMETHOD() RemoveObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:4002
void UpdateStatusbar()
Definition: CDefView.cpp:740
BOOL IsDesktop() const
Definition: CDefView.cpp:298
HMENU m_hMenuArrangeModes
Definition: CDefView.cpp:248
CComPtr< IDataObject > m_pCurDataObject
Definition: CDefView.cpp:267
HRESULT FillEditMenu()
Definition: CDefView.cpp:1896
bool m_isFullStatusBar
Definition: CDefView.cpp:279
STDMETHOD() SetAutomationObject(IDispatch *disp) override
Definition: CDefView.cpp:4190
LRESULT OnMenuMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3025
CComPtr< IShellFolderViewDual > m_pShellFolderViewDual
Definition: CDefView.cpp:242
STDMETHOD() DragLeave() override
Definition: CDefView.cpp:4442
LRESULT OnNCCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1752
STDMETHOD() AutoArrange() override
Definition: CDefView.cpp:3977
BOOL CreateList()
Definition: CDefView.cpp:849
void UpdateListColors()
Definition: CDefView.cpp:934
HWND m_hWndParent
Definition: CDefView.cpp:245
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
Definition: CDefView.cpp:3154
STDMETHOD() AddPropertySheetPages(DWORD dwReserved, LPFNSVADDPROPSHEETPAGE pfn, LPARAM lparam) override
Definition: CDefView.cpp:3285
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
Definition: CDefView.cpp:4772
BOOLEAN LV_DeleteItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1403
STDMETHOD() GetItemObject(UINT uItem, REFIID riid, void **ppv) override
Definition: CDefView.cpp:3547
STDMETHOD() GetObjectCount(UINT *count) override
Definition: CDefView.cpp:4026
HRESULT _MergeToolbar()
Definition: CDefView.cpp:4779
STDMETHOD() SetCallback(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb) override
Definition: CDefView.cpp:4166
HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
Definition: CDefView.cpp:4300
DWORD m_dwAdvf
Definition: CDefView.cpp:262
HRESULT _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:4806
STDMETHOD() Items(UINT uFlags, REFIID riid, void **ppv) override
Definition: CDefView.cpp:3684
STDMETHOD() CreateViewWindow2(LPSV2CVW2_PARAMS view_params) override
Definition: CDefView.cpp:3827
STDMETHOD() SelectItem(PCUITEMID_CHILD pidlItem, SVSIF uFlags) override
Definition: CDefView.cpp:3491
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2417
STDMETHOD() GetAdvise(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) override
Definition: CDefView.cpp:4753
LRESULT OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1648
void CheckToolbar()
Definition: CDefView.cpp:721
HRESULT IncludeObject(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:672
DWORD m_dwAspects
Definition: CDefView.cpp:261
STDMETHOD() SaveViewState() override
Definition: CDefView.cpp:3468
CComPtr< IContextMenu > m_pCM
Definition: CDefView.cpp:274
CComPtr< IShellBrowser > m_pShellBrowser
Definition: CDefView.cpp:239
void _DoCopyToMoveToFolder(BOOL bCopy)
Definition: CDefView.cpp:2487
HRESULT GetDetailsByListColumn(PCUITEMID_CHILD pidl, UINT ListCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1076
INT _FindInsertableIndexFromPoint(POINT pt)
Definition: CDefView.cpp:4462
LRESULT OnPrintClient(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1711
LRESULT DoColumnContextMenu(LRESULT lParam)
Definition: CDefView.cpp:1998
UINT m_cScrollDelay
Definition: CDefView.cpp:269
LISTVIEW_SORT_INFO m_sortInfo
Definition: CDefView.cpp:258
CComPtr< IDataObject > m_pSourceDataObject
Definition: CDefView.cpp:265
HRESULT CheckViewMode(HMENU hmenuView)
Definition: CDefView.cpp:1985
CComPtr< IAdviseSink > m_pAdvSink
Definition: CDefView.cpp:263
void _HandleStatusBarResize(int width)
Definition: CDefView.cpp:4532
STDMETHOD() GetView(SHELLVIEWID *pVid, ULONG view_type) override
Definition: CDefView.cpp:3808
STDMETHOD() SetCurrentViewMode(UINT ViewMode) override
Definition: CDefView.cpp:3617
LRESULT OnInitMenuPopup(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3057
LRESULT OnUpdateStatusbar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:838
POINT m_ptFirstMousePos
Definition: CDefView.cpp:271
LRESULT OnExplorerCommand(UINT uCommand, BOOL bUseSelection)
Definition: CDefView.cpp:2367
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3038
ClipboardViewerChain m_ClipboardChain
Definition: CDefView.cpp:243
STDMETHOD() GetItemPosition(PCUITEMID_CHILD pidl, POINT *ppt) override
Definition: CDefView.cpp:3707
STDMETHOD() SetPoints(IDataObject *obj) override
Definition: CDefView.cpp:4154
STDMETHOD() IsDropOnSource(IDropTarget *drop_target) override
Definition: CDefView.cpp:4086
HRESULT FillList(BOOL IsRefreshCommand=TRUE)
Definition: CDefView.cpp:1538
CComPtr< IDropTarget > m_pCurDropTarget
Definition: CDefView.cpp:266
PIDLIST_ABSOLUTE m_pidlParent
Definition: CDefView.cpp:255
STDMETHOD() GetSelectionMarkedItem(int *piItem) override
Definition: CDefView.cpp:3689
STDMETHOD() TranslateAccelerator(MSG *pmsg) override
Definition: CDefView.cpp:3162
STDMETHOD() QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) override
Definition: CDefView.cpp:4698
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:4717
HMENU m_hContextMenu
Definition: CDefView.cpp:250
CComPtr< IShellFolderViewCB > m_pShellFolderViewCB
Definition: CDefView.cpp:238
STDMETHOD() GiveFeedback(DWORD dwEffect) override
Definition: CDefView.cpp:4710
STDMETHOD() ArrangeGrid() override
Definition: CDefView.cpp:3971
STDMETHOD() SetRedraw(BOOL redraw) override
Definition: CDefView.cpp:4051
void _ForceStatusBarResize()
Definition: CDefView.cpp:4558
BOOL m_Destroyed
Definition: CDefView.cpp:284
CComPtr< IContextMenu > m_pFileMenu
Definition: CDefView.cpp:275
HRESULT WINAPI Initialize(IShellFolder *shellFolder)
Definition: CDefView.cpp:661
PCUITEMID_CHILD * m_apidl
Definition: CDefView.cpp:254
CComPtr< IFolderFilter > m_pFolderFilter
Definition: CDefView.cpp:241
void LV_RefreshIcons()
Definition: CDefView.cpp:1507
LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2510
HRESULT InvokeContextMenuCommand(CComPtr< IContextMenu > &pCM, LPCSTR lpVerb, POINT *pt=NULL, bool TryMapVerb=false)
Definition: CDefView.cpp:2146
STDMETHOD() GetSelectedObjects(PCUITEMID_CHILD **pidl, UINT *items) override
Definition: CDefView.cpp:4065
HDPA m_ListToFolderColMap
Definition: CDefView.cpp:257
STDMETHOD() QuerySupport(UINT *support) override
Definition: CDefView.cpp:4184
void OnDeactivate()
Definition: CDefView.cpp:2442
LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1679
void _MoveSelectionOnAutoArrange(POINT pt)
Definition: CDefView.cpp:4586
static INT CALLBACK ListViewCompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData)
Definition: CDefView.cpp:1253
STDMETHOD() GetDefaultSpacing(POINT *ppt) override
Definition: CDefView.cpp:3745
CLSID m_Category
Definition: CDefView.cpp:283
HRESULT FillArrangeAsMenu(HMENU hmenuArrange)
Definition: CDefView.cpp:1929
signed char m_SpecialFolder
Definition: CDefView.cpp:278
STDMETHOD() UpdateObject(PITEMID_CHILD pidl_old, PITEMID_CHILD pidl_new, UINT *item) override
Definition: CDefView.cpp:4039
STDMETHOD() GetItemSpacing(ITEMSPACING *spacing) override
Definition: CDefView.cpp:4160
static ATL::CWndClassInfo & GetWndClassInfo()
Definition: CDefView.cpp:517
SFGAOF GetItemAttributes(PCUITEMID_CHILD pidl, UINT Query)
Definition: CDefView.cpp:1319
CComPtr< IShellFolder2 > m_pSF2Parent
Definition: CDefView.cpp:236
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2548
HRESULT OpenSelectedItems(PCSTR pszVerb=NULL)
Definition: CDefView.cpp:2208
STDMETHOD() AddObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:3984
STDMETHOD() GetDropPoint(POINT *pt) override
Definition: CDefView.cpp:4106
HICON m_hMyComputerIcon
Definition: CDefView.cpp:287
STDMETHOD() GetSelectedCount(UINT *count) override
Definition: CDefView.cpp:4059
STDMETHOD() GetFocusedItem(int *piItem) override
Definition: CDefView.cpp:3698
LRESULT OnDrawClipboard(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3123
STDMETHOD() GetSpacing(POINT *ppt) override
Definition: CDefView.cpp:3723
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1653
STDMETHOD() CreateViewWindow(IShellView *psvPrevious, LPCFOLDERSETTINGS pfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd) override
Definition: CDefView.cpp:3219
FOLDERVIEWMODE GetDefaultViewMode()
Definition: CDefView.cpp:3597
STDMETHOD() GetDragPoint(POINT *pt) override
Definition: CDefView.cpp:4097
BOOL m_bmenuBarInitialized
Definition: CDefView.cpp:251
HRESULT MapFolderColumnToListColumn(UINT FoldCol)
Definition: CDefView.cpp:1020
SFGAOF GetSelectionAttributes(SFGAOF Query)
Definition: CDefView.cpp:2138
PCUITEMID_CHILD _PidlByItem(int i)
Definition: CDefView.cpp:1331
UINT m_cidl
Definition: CDefView.cpp:253
void ColumnListChanged()
Definition: CDefView.cpp:1187
STDMETHOD() GetFolder(REFIID riid, void **ppv) override
Definition: CDefView.cpp:3651
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
Definition: CDefView.cpp:4217
UINT m_uState
Definition: CDefView.cpp:252
STDMETHOD() DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CDefView.cpp:4434
STDMETHOD() Rearrange(LPARAM sort) override
Definition: CDefView.cpp:3958
DWORD m_grfKeyState
Definition: CDefView.cpp:272
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
Definition: CDefView.cpp:4196
HRESULT _GetSnapToGrid()
Definition: CDefView.cpp:3755
void LV_RefreshIcon(INT iItem)
Definition: CDefView.cpp:1496
HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream)
Definition: CDefView.cpp:3308
UINT GetSelections()
Definition: CDefView.cpp:2105
BOOL m_isEditing
Definition: CDefView.cpp:277
BOOLEAN LV_RenameItem(PCUITEMID_CHILD pidlOld, PCUITEMID_CHILD pidlNew)
Definition: CDefView.cpp:1420
STDMETHOD() GetCurrentInfo(LPFOLDERSETTINGS pfs) override
Definition: CDefView.cpp:3273
CComPtr< ICommDlgBrowser > m_pCommDlgBrowser
Definition: CDefView.cpp:240
STDMETHOD() GetCurrentViewMode(UINT *pViewMode) override
Definition: CDefView.cpp:3606
POINT m_ptLastMousePos
Definition: CDefView.cpp:270
STDMETHOD() RefreshObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:4045
BOOL InitList()
Definition: CDefView.cpp:981
ULONG m_hNotify
Definition: CDefView.cpp:259
STDMETHOD() IsBkDropTarget(IDropTarget *drop_target) override
Definition: CDefView.cpp:4124
HRESULT MapListColumnToFolderColumn(UINT ListCol)
Definition: CDefView.cpp:1033
STDMETHOD() Refresh() override
Definition: CDefView.cpp:3207
HRESULT LoadViewState()
Definition: CDefView.cpp:3333
bool m_HasCutItems
Definition: CDefView.cpp:281
HRESULT GetDetailsByFolderColumn(PCUITEMID_CHILD pidl, UINT FoldCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1054
STDMETHOD() SelectAndPositionItems(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, POINT *apt, DWORD dwFlags) override
Definition: CDefView.cpp:3792
static bool IsSupportedFolderViewMode(int Mode)
Definition: CDefView.cpp:377
HRESULT OnDefaultCommand()
Definition: CDefView.cpp:688
STDMETHOD() SetClipboard(BOOL move) override
Definition: CDefView.cpp:4130
void UpdateFolderViewFlags()
Definition: CDefView.cpp:3476
HRESULT FillViewMenu()
Definition: CDefView.cpp:1913
LONG m_iDragOverItem
Definition: CDefView.cpp:268
STDMETHOD() ItemCount(UINT uFlags, int *pcItems) override
Definition: CDefView.cpp:3672
virtual VOID OnFinalMessage(HWND) override
Definition: CDefView.cpp:1759
LRESULT OnGetShellBrowser(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1747
STDMETHOD() MoveIcons(IDataObject *obj) override
Definition: CDefView.cpp:4112
STDMETHOD() GetWindow(HWND *lphwnd) override
Definition: CDefView.cpp:3145
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:3834
HMENU m_hMenuViewModes
Definition: CDefView.cpp:249
HACCEL m_hAccel
Definition: CDefView.cpp:260
STDMETHOD() GetArrangeParam(LPARAM *sort) override
Definition: CDefView.cpp:3964
LRESULT OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2923
virtual WNDPROC GetWindowProc() override
Definition: CDefView.cpp:530
STDMETHOD() Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) override
Definition: CDefView.cpp:4729
STDMETHOD() GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet) override
Definition: CDefView.cpp:4723
STDMETHOD() HandleRename(LPCITEMIDLIST pidl) override
Definition: CDefView.cpp:3925
FOLDERSETTINGS m_FolderSettings
Definition: CDefView.cpp:246
STDMETHOD() DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CDefView.cpp:4415
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:535
STDMETHOD() SetObjectCount(UINT count, UINT flags) override
Definition: CDefView.cpp:4033
STDMETHOD() GetObject(PITEMID_CHILD *pidl, UINT item) override
Definition: CDefView.cpp:3996
void UpdateStatusbarLocation()
Definition: CDefView.cpp:812
LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2657
STDMETHOD() EnableModeless(BOOL fEnable) override
Definition: CDefView.cpp:3178
CListView m_ListView
Definition: CDefView.cpp:244
BOOL _Sort(int Col=-1)
Definition: CDefView.cpp:1267
STDMETHOD() SetAdvise(DWORD aspects, DWORD advf, IAdviseSink *pAdvSink) override
Definition: CDefView.cpp:4741
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1764
BOOL LV_UpdateItem(INT nItem, PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1459
STDMETHOD() UIActivate(UINT uState) override
Definition: CDefView.cpp:3184
int LV_FindItemByPidl(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1345
STDMETHOD() Item(int iItemIndex, PITEMID_CHILD *ppidl) override
Definition: CDefView.cpp:3659
HRESULT SelectAndPositionItem(int Idx, UINT fSVSI, POINT *ppt)
Definition: CDefView.cpp:3939
HRESULT LoadColumns(SIZE_T *pColList=NULL, UINT ColListCount=0)
Definition: CDefView.cpp:1122
void DoActivate(UINT uState)
Definition: CDefView.cpp:2453
STDMETHOD() Select(UINT flags) override
Definition: CDefView.cpp:4178
SFVM_CUSTOMVIEWINFO_DATA m_viewinfo_data
Definition: CDefView.cpp:285
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 SetItemText(int i, int subItem, LPCWSTR text)
Definition: rosctrls.h:186
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
_In_ size_t const _In_ int _In_ bool const _In_ unsigned const _In_ __acrt_rounding_mode const _Inout_ __crt_cached_ptd_host & ptd
Definition: cvt.cpp:355
#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
unsigned int idx
Definition: utils.c:41
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
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
VOID WINAPI ImageList_EndDrag(void)
Definition: imagelist.c:1865
BOOL WINAPI ImageList_DragEnter(HWND hwndLock, INT x, INT y)
Definition: imagelist.c:976
BOOL WINAPI ImageList_DragMove(INT x, INT y)
Definition: imagelist.c:1088
BOOL WINAPI ImageList_DragLeave(HWND hwndLock)
Definition: imagelist.c:1010
BOOL WINAPI ImageList_BeginDrag(HIMAGELIST himlTrack, INT iTrack, INT dxHotspot, INT dyHotspot)
Definition: imagelist.c:648
#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
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4265
static struct @508 sort
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1274
INT WINAPI DECLSPEC_HOTPATCH LoadStringW(HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
Definition: string.c:1220
#define assert(_expr)
Definition: assert.h:32
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2802
#define UINT_MAX
Definition: limits.h:27
#define true
Definition: stdbool.h:24
#define false
Definition: stdbool.h:25
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:1444
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:438
#define SHV_UPDATESTATUSBAR
Definition: precomp.h:136
EXTERN_C HRESULT WINAPI SHGetRealIDL(_In_ IShellFolder *psf, _In_ PCUITEMID_CHILD pidlSimple, _Outptr_ PITEMID_CHILD *ppidlReal)
Definition: utils.cpp:1633
static BOOL IsEqualPersistClassID(IPersist *pPersist, REFCLSID clsid)
Definition: utils.h:36
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:348
BOOL WINAPI IsOS(DWORD feature)
Definition: ordinal.c:4230
#define EnableModeless(type)
Definition: ordinal.c:3663
DWORD WINAPI SHFillRectClr(HDC hDC, LPCRECT pRect, COLORREF cRef)
Definition: ordinal.c:2133
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457
DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:4725
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1411
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
Definition: string.c:2803
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2927
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2524
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#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:42
#define RGB(r, g, b)
Definition: precomp.h:67
#define GetBValue(quad)
Definition: precomp.h:71
#define GetGValue(quad)
Definition: precomp.h:70
#define GetRValue(quad)
Definition: precomp.h:69
return ret
Definition: mutex.c:146
#define _(op)
Definition: opcodes.c:24
#define L(x)
Definition: resources.c:13
#define UlongToPtr(u)
Definition: config.h:106
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
POINTL point
Definition: edittest.c:50
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
pKey DeleteObject()
UINT SHELL_GetIconUnderlineFlags()
Definition: general.cpp:134
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
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 res
Definition: glext.h:9613
GLuint buffer
Definition: glext.h:5915
const GLubyte * c
Definition: glext.h:8905
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
#define DbgPrint
Definition: hal.h:12
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
_In_ ULONG Mode
Definition: hubbusif.h:303
#define ss
Definition: i386-dis.c:441
BOOL WINAPI Shell_GetImageLists(HIMAGELIST *lpBigList, HIMAGELIST *lpSmallList)
Definition: iconcache.cpp:689
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:772
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:795
@ SV3CVW3_FORCEVIEWMODE
Definition: shobjidl.idl:840
@ SV3CVW3_FORCEFOLDERFLAGS
Definition: shobjidl.idl:841
DWORD SV3CVW3_FLAGS
Definition: shobjidl.idl:844
@ SVUIA_DEACTIVATE
Definition: shobjidl.idl:753
@ SVUIA_ACTIVATE_FOCUS
Definition: shobjidl.idl:755
@ SVUIA_ACTIVATE_NOFOCUS
Definition: shobjidl.idl:754
UINT SVSIF
Definition: shobjidl.idl:739
@ SVGIO_SELECTION
Definition: shobjidl.idl:744
@ SVGIO_BACKGROUND
Definition: shobjidl.idl:743
@ SVGIO_TYPE_MASK
Definition: shobjidl.idl:747
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 x0
Definition: linetemp.h:95
GLint y0
Definition: linetemp.h:96
GLint dx
Definition: linetemp.h:97
#define HResultFromWin32
Definition: loader.cpp:14
#define ZeroMemory
Definition: minwinbase.h:31
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
UINT_PTR WPARAM
Definition: minwindef.h:174
#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:88
static HICON
Definition: imagelist.c:80
HRESULT hres
Definition: protocol.c:465
static HMODULE MODULEINFO DWORD cb
Definition: module.c:38
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:60
static HMENU hmenu
Definition: win.c:66
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
const CLSID * clsid
Definition: msctf.cpp:50
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
_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
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define KEY_READ
Definition: nt_native.h:1026
#define BOOL
Definition: nt_native.h:43
#define DWORD
Definition: nt_native.h:44
#define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
Definition: ntbasedef.h:331
#define UNICODE_NULL
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#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 PathCombineW
Definition: pathcch.h:318
#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 SHCloneSpecialIDList(HWND hwndOwner, int nFolder, BOOL fCreate)
Definition: pidl.c:446
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:199
BOOL WINAPI ILIsParent(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL bImmediate)
Definition: pidl.c:698
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:222
BOOL _ILIsSpecialFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2126
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2144
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1496
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2519
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:583
#define INT
Definition: polytest.cpp:20
static const WCHAR szName[]
Definition: powrprof.c:45
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:2478
#define NM_RELEASEDCAPTURE
Definition: commctrl.h:141
#define Header_GetItem(hwndHD, i, phdi)
Definition: commctrl.h:751
#define LVM_GETCALLBACKMASK
Definition: commctrl.h:2421
#define LVSIL_SMALL
Definition: commctrl.h:2304
#define I_IMAGECALLBACK
Definition: commctrl.h:2390
#define LVN_GETDISPINFOA
Definition: commctrl.h:3158
#define LVS_EX_ONECLICKACTIVATE
Definition: commctrl.h:2740
#define ListView_IsGroupViewEnabled(hwnd)
Definition: commctrl.h:3012
#define ListView_GetItemRect(hwnd, i, prc, code)
Definition: commctrl.h:2483
#define LVS_SINGLESEL
Definition: commctrl.h:2271
#define LVS_ICON
Definition: commctrl.h:2266
#define LVS_SHAREIMAGELISTS
Definition: commctrl.h:2275
#define LVN_BEGINRDRAG
Definition: commctrl.h:3146
#define LVS_EX_LABELTIP
Definition: commctrl.h:2748
#define LVN_COLUMNCLICK
Definition: commctrl.h:3144
#define ListView_GetColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2627
#define ListView_InsertColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2641
#define LVS_NOCOLUMNHEADER
Definition: commctrl.h:2289
#define NM_DBLCLK
Definition: commctrl.h:131
#define LPSTR_TEXTCALLBACKW
Definition: commctrl.h:2385
#define LVIF_STATE
Definition: commctrl.h:2317
#define LVS_EX_SNAPTOGRID
Definition: commctrl.h:2753
#define ListView_GetEditControl(hwndLV)
Definition: commctrl.h:2548
#define Header_SetItem(hwndHD, i, phdi)
Definition: commctrl.h:758
#define LVS_TYPEMASK
Definition: commctrl.h:2270
#define LVNI_SELECTED
Definition: commctrl.h:2429
#define ListView_GetHeader(hwnd)
Definition: commctrl.h:2656
#define LVHT_ONITEM
Definition: commctrl.h:2502
#define CLR_NONE
Definition: commctrl.h:319
#define LVS_SHOWSELALWAYS
Definition: commctrl.h:2272
#define LVS_REPORT
Definition: commctrl.h:2267
#define LVS_SMALLICON
Definition: commctrl.h:2268
#define LVN_DELETEALLITEMS
Definition: commctrl.h:3139
#define LVM_SETCALLBACKMASK
Definition: commctrl.h:2424
#define LVA_DEFAULT
Definition: commctrl.h:2532
#define ListView_DeleteColumn(hwnd, iCol)
Definition: commctrl.h:2644
#define CDRF_DODEFAULT
Definition: commctrl.h:268
#define LVCF_WIDTH
Definition: commctrl.h:2592
#define TB_CHECKBUTTON
Definition: commctrl.h:1043
#define LVNI_FOCUSED
Definition: commctrl.h:2428
#define LVN_INSERTITEM
Definition: commctrl.h:3137
#define LVS_ALIGNTOP
Definition: commctrl.h:2284
#define ListView_GetNextItem(hwnd, i, flags)
Definition: commctrl.h:2439
#define HDN_ENDTRACKW
Definition: commctrl.h:850
#define DPA_FastGetPtr(hdpa, i)
Definition: commctrl.h:4977
#define NM_CLICK
Definition: commctrl.h:130
#define LVN_BEGINDRAG
Definition: commctrl.h:3145
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2739
#define NM_KILLFOCUS
Definition: commctrl.h:136
#define SB_SETICON
Definition: commctrl.h:1966
#define LVS_EX_TRACKSELECT
Definition: commctrl.h:2737
#define LPSTR_TEXTCALLBACK
Definition: commctrl.h:2388
#define HDF_SORTUP
Definition: commctrl.h:724
#define ListView_GetOrigin(hwndLV, ppt)
Definition: commctrl.h:2674
#define NM_CUSTOMDRAW
Definition: commctrl.h:137
#define LVN_ENDLABELEDITW
Definition: commctrl.h:3143
#define TB_ENABLEBUTTON
Definition: commctrl.h:1042
#define LVIS_SELECTED
Definition: commctrl.h:2324
#define LVN_BEGINLABELEDITW
Definition: commctrl.h:3141
#define LVITEM
Definition: commctrl.h:2380
#define NM_RETURN
Definition: commctrl.h:132
#define ListView_RedrawItems(hwndLV, iFirst, iLast)
Definition: commctrl.h:2530
#define LVIF_PARAM
Definition: commctrl.h:2316
#define LVM_EDITLABEL
Definition: commctrl.h:2543
#define HDI_FORMAT
Definition: commctrl.h:705
struct tagNMLISTVIEW * LPNMLISTVIEW
#define LVM_GETITEMRECT
Definition: commctrl.h:2482
#define LVS_NOSORTHEADER
Definition: commctrl.h:2290
#define LVS_EDITLABELS
Definition: commctrl.h:2278
#define LVIF_TEXT
Definition: commctrl.h:2314
#define LVIR_SELECTBOUNDS
Definition: commctrl.h:2480
#define LVM_GETEXTENDEDLISTVIEWSTYLE
Definition: commctrl.h:2732
#define Header_GetItemCount(hwndHD)
Definition: commctrl.h:734
#define LVA_SNAPTOGRID
Definition: commctrl.h:2535
#define LVCF_FMT
Definition: commctrl.h:2591
#define NM_RCLICK
Definition: commctrl.h:133
#define NM_SETFOCUS
Definition: commctrl.h:135
#define LVCF_SUBITEM
Definition: commctrl.h:2594
#define LV_HITTESTINFO
Definition: commctrl.h:2509
#define LVS_EX_UNDERLINECOLD
Definition: commctrl.h:2746
#define DPA_GetPtrPtr(hdpa)
Definition: commctrl.h:4974
#define SB_SETTEXT
Definition: commctrl.h:1954
#define DPA_AppendPtr(hdpa, pitem)
Definition: commctrl.h:4975
#define DPA_GetPtrCount(hdpa)
Definition: commctrl.h:4972
#define SB_SETPARTS
Definition: commctrl.h:1959
#define LVN_GETDISPINFOW
Definition: commctrl.h:3159
#define LVS_EX_DOUBLEBUFFER
Definition: commctrl.h:2750
#define LVS_EX_UNDERLINEHOT
Definition: commctrl.h:2745
#define ListView_SetColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2634
#define LVIF_IMAGE
Definition: commctrl.h:2315
#define LVS_ALIGNLEFT
Definition: commctrl.h:2285
#define LVKF_ALT
Definition: commctrl.h:3060
#define ListView_GetItemSpacing(hwndLV, fSmall)
Definition: commctrl.h:2717
#define LVN_ITEMCHANGED
Definition: commctrl.h:3136
#define LVIF_DI_SETITEM
Definition: commctrl.h:3171
#define LVCF_TEXT
Definition: commctrl.h:2593
#define LVN_DELETEITEM
Definition: commctrl.h:3138
#define HDITEM
Definition: commctrl.h:697
#define LVIS_FOCUSED
Definition: commctrl.h:2323
#define HDF_SORTDOWN
Definition: commctrl.h:725
#define LVCOLUMN
Definition: commctrl.h:2586
#define LVS_AUTOARRANGE
Definition: commctrl.h:2277
#define LVS_LIST
Definition: commctrl.h:2269
#define ListView_CancelEditLabel(hwnd)
Definition: commctrl.h:3018
#define LVS_EX_INFOTIP
Definition: commctrl.h:2744
#define LVN_ITEMACTIVATE
Definition: commctrl.h:3152
#define LVSIL_NORMAL
Definition: commctrl.h:2303
#define LVIS_CUT
Definition: commctrl.h:2325
#define LVNI_ALL
Definition: commctrl.h:2427
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
#define OS_SERVERADMINUI
Definition: shlwapi.h:260
#define SHDeleteKey
Definition: shlwapi.h:831
#define SHGVSPB_FOLDER
Definition: shlwapi.h:174
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
#define ILGetSize
Definition: shellclasses.h:638
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
HRESULT WINAPI SHLimitInputEdit(HWND hWnd, IShellFolder *psf)
Definition: shellord.c:3048
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
#define S_EQUAL
Definition: shellutils.h:676
#define SHELL_ErrorBox
Definition: shellutils.h:126
HRESULT hr
Definition: shlfolder.c:183
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:628
#define SHCNE_DRIVEREMOVED
Definition: shlobj.h:1902
#define SFVM_UPDATINGOBJECT
Definition: shlobj.h:1338
#define SHCNE_RMDIR
Definition: shlobj.h:1899
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1323
#define SHCNE_DELETE
Definition: shlobj.h:1897
#define SHCNE_MKDIR
Definition: shlobj.h:1898
#define SFVM_WINDOWCREATED
Definition: shlobj.h:1313
#define SHCNE_UPDATEITEM
Definition: shlobj.h:1908
#define SHCNE_RENAMEITEM
Definition: shlobj.h:1895
#define SSF_DOUBLECLICKINWEBVIEW
Definition: shlobj.h:1615
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1907
#define SHCNE_MEDIAINSERTED
Definition: shlobj.h:1900
#define SHCNE_UPDATEIMAGE
Definition: shlobj.h:1910
#define SFVM_SIZE
Definition: shlobj.h:1344
#define SSF_WIN95CLASSIC
Definition: shlobj.h:1618
#define SHCNE_CREATE
Definition: shlobj.h:1896
#define FCIDM_MENU_VIEW_SEP_OPTIONS
Definition: shlobj.h:638
#define SHCNE_RENAMEFOLDER
Definition: shlobj.h:1912
#define SHCNRF_NewDelivery
Definition: shlobj.h:1944
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2535
#define MM_DONTREMOVESEPS
Definition: shlobj.h:2536
#define SHCNRF_ShellLevel
Definition: shlobj.h:1942
#define SHCNE_MEDIAREMOVED
Definition: shlobj.h:1901
#define FCIDM_MENU_FILE
Definition: shlobj.h:635
#define SHCNE_EXTENDED_EVENT
Definition: shlobj.h:1915
#define SHCNE_DRIVEADD
Definition: shlobj.h:1903
#define SHCNE_ASSOCCHANGED
Definition: shlobj.h:1916
#define CSIDL_DESKTOP
Definition: shlobj.h:2179
#define CSIDL_NETWORK
Definition: shlobj.h:2196
#define SFVM_COLUMNCLICK
Definition: shlobj.h:1320
#define SFVM_ADDPROPERTYPAGES
Definition: shlobj.h:1340
#define FCIDM_SHVIEWFIRST
Definition: shlobj.h:588
#define FCIDM_MENU_VIEW
Definition: shlobj.h:637
#define SHCNRF_InterruptLevel
Definition: shlobj.h:1941
#define SHCNE_ATTRIBUTES
Definition: shlobj.h:1906
#define SHCNE_ALLEVENTS
Definition: shlobj.h:1919
#define MM_ADDSEPARATOR
Definition: shlobj.h:2534
#define SSF_SHOWSUPERHIDDEN
Definition: shlobj.h:1626
#define SFVM_HWNDMAIN
Definition: shlobj.h:1339
#define SHCNE_FREESPACE
Definition: shlobj.h:1913
#define SFVM_FSNOTIFY
Definition: shlobj.h:1312
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1610
#define FCIDM_MENU_EDIT
Definition: shlobj.h:636
@ REST_NOVIEWCONTEXTMENU
Definition: shlobj.h:1674
#define SFVM_QUERYFSNOTIFY
Definition: shlobj.h:1321
#define SFVM_GETNOTIFY
Definition: shlobj.h:1342
#define CSIDL_BITBUCKET
Definition: shlobj.h:2189
#define FCIDM_SHVIEWLAST
Definition: shlobj.h:619
#define FCIDM_SHVIEW_DESELECTALL
Definition: shlobj_undoc.h:66
#define DVCMDID_SET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:115
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:116
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:641
@ FWF_SNAPTOGRID
Definition: shobjidl.idl:644
@ FWF_AUTOARRANGE
Definition: shobjidl.idl:642
@ FWF_NOGROUPING
Definition: shobjidl.idl:662
@ FWF_ALIGNLEFT
Definition: shobjidl.idl:653
@ FWF_NOSCROLL
Definition: shobjidl.idl:652
@ FWF_NOHEADERINALLVIEWS
Definition: shobjidl.idl:666
@ FWF_SINGLECLICKACTIVATE
Definition: shobjidl.idl:657
@ FWF_OWNERDATA
Definition: shobjidl.idl:645
@ FWF_FULLROWSELECT
Definition: shobjidl.idl:663
@ FWF_NOBROWSERVIEWSTATE
Definition: shobjidl.idl:670
@ FWF_NOCLIENTEDGE
Definition: shobjidl.idl:651
@ FWF_TRANSPARENT
Definition: shobjidl.idl:650
@ FWF_SINGLESEL
Definition: shobjidl.idl:648
@ FWF_NOCOLUMNHEADER
Definition: shobjidl.idl:665
@ FWF_DESKTOP
Definition: shobjidl.idl:647
@ FWF_NOSUBFOLDERS
Definition: shobjidl.idl:649
LPARAM LPFNSVADDPROPSHEETPAGE
Definition: shobjidl.idl:117
FOLDERVIEWMODE
Definition: shobjidl.idl:677
@ FVM_SMALLICON
Definition: shobjidl.idl:681
@ FVM_AUTO
Definition: shobjidl.idl:678
@ FVM_LIST
Definition: shobjidl.idl:682
@ FVM_LAST
Definition: shobjidl.idl:688
@ FVM_ICON
Definition: shobjidl.idl:679
@ FVM_DETAILS
Definition: shobjidl.idl:683
@ FVM_FIRST
Definition: shobjidl.idl:680
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:166
#define FCIDM_SHVIEW_AUTOARRANGE
Definition: shresdef.h:887
#define FCIDM_SHVIEW_SELECTALL
Definition: shresdef.h:878
#define IDS_OBJECTS_SELECTED
Definition: shresdef.h:287
#define FCIDM_SHVIEW_CUT
Definition: shresdef.h:871
#define FCIDM_SHVIEW_LISTVIEW
Definition: shresdef.h:883
#define FCIDM_SHVIEW_UNDO
Definition: shresdef.h:874
#define FCIDM_SHVIEW_ALIGNTOGRID
Definition: shresdef.h:889
#define FCIDM_SHVIEW_COPY
Definition: shresdef.h:872
#define IDM_DVSELECT
Definition: shresdef.h:922
#define FCIDM_SHVIEW_TILEVIEW
Definition: shresdef.h:885
#define FCIDM_SHVIEW_BIGICON
Definition: shresdef.h:881
#define IDS_MYCOMPUTER
Definition: shresdef.h:283
#define FCIDM_SHVIEW_INSERTLINK
Definition: shresdef.h:875
#define FCIDM_SHVIEW_REFRESH
Definition: shresdef.h:897
#define IDI_SHELL_COMPUTER_DESKTOP
Definition: shresdef.h:688
#define FCIDM_SHVIEW_NEWFOLDER
Definition: shresdef.h:893
#define FCIDM_SHVIEW_SMALLICON
Definition: shresdef.h:882
#define FCIDM_TB_SMALLICON
Definition: shresdef.h:901
#define FCIDM_SHVIEW_PROPERTIES
Definition: shresdef.h:870
#define FCIDM_SHVIEW_SNAPTOGRID
Definition: shresdef.h:888
#define FCIDM_SHVIEW_VIEW
Definition: shresdef.h:866
#define FCIDM_SHVIEW_COPYTO
Definition: shresdef.h:876
#define FCIDM_SHVIEW_MOVETO
Definition: shresdef.h:877
#define FCIDM_SHVIEW_DELETE
Definition: shresdef.h:868
#define FCIDM_SHVIEW_RENAME
Definition: shresdef.h:869
#define IDS_OBJECTS
Definition: shresdef.h:286
#define FCIDM_TB_REPORTVIEW
Definition: shresdef.h:902
#define FCIDM_SHVIEW_CREATELINK
Definition: shresdef.h:867
#define FCIDM_SHVIEW_REPORTVIEW
Definition: shresdef.h:884
#define IDA_SHELLVIEW
Definition: shresdef.h:26
#define FCIDM_SHVIEW_INVERTSELECTION
Definition: shresdef.h:879
#define FCIDM_SHVIEW_ARRANGE
Definition: shresdef.h:865
#define FCIDM_SHVIEW_INSERT
Definition: shresdef.h:873
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
ITEMID_CHILD UNALIGNED * PUITEMID_CHILD
Definition: shtypes.idl:68
@ 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
_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:804
SHELLVIEWID const * pvid
Definition: shobjidl.idl:807
IShellBrowser * psbOwner
Definition: shobjidl.idl:805
bool bLoadedFromViewState
Definition: CDefView.cpp:64
bool bColumnIsFolderColumn
Definition: CDefView.cpp:65
HMENU & m_hMenu
Definition: CDefView.cpp:134
CComPtr< IContextMenu > & m_pCM
Definition: CDefView.cpp:133
MenuCleanup(CComPtr< IContextMenu > &pCM, HMENU &menu)
Definition: CDefView.cpp:136
FOLDERSETTINGS FolderSettings
Definition: CDefView.cpp:98
static const UINT SIG
Definition: CDefView.cpp:93
static const UINT VALIDFWF
Definition: CDefView.cpp:97
static const UINT SIG
Definition: CDefView.cpp:85
UINT Columns[MAXCOUNT]
Definition: CDefView.cpp:88
BOOL fShowSuperHidden
Definition: shlobj.h:1562
BOOL fShowAllObjects
Definition: shlobj.h:1546
Definition: bl.h:1331
Definition: dpa.c:49
Definition: scsiwmi.h:51
IShellFolderViewCB * psfvcb
Definition: shlobj.h:1365
IShellView * psvOuter
Definition: shlobj.h:1364
UINT cbSize
Definition: shlobj.h:1362
IShellFolder * pshf
Definition: shlobj.h:1363
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1891
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
Definition: undname.c:54
Definition: cache.c:49
Definition: name.c:39
Definition: pmap_prot.h:88
Definition: parse.h:23
LVITEMW item
Definition: commctrl.h:3184
LVITEMA item
Definition: commctrl.h:3179
int cchTextMax
Definition: commctrl.h:2354
LPSTR pszText
Definition: commctrl.h:2353
LPWSTR pszText
Definition: commctrl.h:2370
int iSubItem
Definition: commctrl.h:2367
int cchTextMax
Definition: commctrl.h:2371
UINT state
Definition: commctrl.h:2368
UINT mask
Definition: commctrl.h:2365
LPARAM lParam
Definition: commctrl.h:2373
UINT stateMask
Definition: commctrl.h:2369
int iImage
Definition: commctrl.h:2372
ULONG_PTR dwItemData
Definition: winuser.h:3370
LPWSTR dwTypeData
Definition: winuser.h:3371
UINT message
Definition: winuser.h:3217
WPARAM wParam
Definition: winuser.h:3218
UINT code
Definition: winuser.h:3261
HWND hwndFrom
Definition: winuser.h:3259
UINT uNewState
Definition: commctrl.h:3041
LPARAM lParam
Definition: commctrl.h:3045
UINT uOldState
Definition: commctrl.h:3042
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:108
LONG bottom
Definition: windef.h:109
LONG top
Definition: windef.h:107
LONG left
Definition: windef.h:106
HANDLE lEvent
Definition: tftpd.cpp:56
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
uint16_t * PWSTR
Definition: typedefs.h:56
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
const char * PCSTR
Definition: typedefs.h:52
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:252
BOOL WINAPI SetShellWindowEx(HWND, HWND)
Definition: ntwrapper.h:58
Definition: pdh_main.c:96
DWORD dwAttributes
Definition: vdmdbg.h:34
#define _T(x)
Definition: vfdio.h:22
view_type
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3708
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3709
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
DWORD COLORREF
Definition: windef.h:100
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:3451
#define DRAGDROP_S_USEDEFAULTCURSORS
Definition: winerror.h:3763
#define DRAGDROP_S_DROP
Definition: winerror.h:3758
#define E_NOINTERFACE
Definition: winerror.h:3479
#define NOERROR
Definition: winerror.h:3448
#define DRAGDROP_S_CANCEL
Definition: winerror.h:3761
#define E_UNEXPECTED
Definition: winerror.h:3528
#define HRESULT_CODE(hr)
Definition: winerror.h:188
#define ERROR_INVALID_DATA
Definition: winerror.h:238
LONG WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *)
Definition: font.c:2293
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
#define GetObject
Definition: wingdi.h:4914
BOOL WINAPI DeleteDC(_In_ HDC)
#define HKEY_CURRENT_USER
Definition: winreg.h:11
HWND WINAPI GetFocus(void)
Definition: window.c:1863
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_ERASEBKGND
Definition: winuser.h:1653
#define MK_RBUTTON
Definition: winuser.h:2404
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:1771
#define MIIM_ID
Definition: winuser.h:733
#define COLOR_WINDOW
Definition: winuser.h:929
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define SPI_SETDESKWALLPAPER
Definition: winuser.h:1380
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define COLOR_WINDOWTEXT
Definition: winuser.h:932
#define WM_VSCROLL
Definition: winuser.h:1772
#define TPM_RIGHTBUTTON
Definition: winuser.h:2416
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1636
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_DRAWCLIPBOARD
Definition: winuser.h:1897
#define WM_SIZE
Definition: winuser.h:1639
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define SB_VERT
Definition: winuser.h:553
HMENU WINAPI CreateMenu(void)
Definition: menu.c:829
#define SWP_NOMOVE
Definition: winuser.h:1255
#define WM_COMMAND
Definition: winuser.h:1768
#define MF_STRING
Definition: winuser.h:138
#define IDC_ARROW
Definition: winuser.h:695
#define WM_KEYFIRST
Definition: winuser.h:1742
#define VK_CONTROL
Definition: winuser.h:2239
#define MFS_DISABLED
Definition: winuser.h:760
#define WM_SETFOCUS
Definition: winuser.h:1641
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MF_CHECKED
Definition: winuser.h:132
#define SWP_NOSIZE
Definition: winuser.h:1256
UINT WINAPI GetMenuItemID(_In_ HMENU, _In_ int)
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1391
BOOL WINAPI MessageBeep(_In_ UINT uType)
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1654
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
#define WM_CHANGECBCHAIN
Definition: winuser.h:1902
#define WM_GETFONT
Definition: winuser.h:1679
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define MF_UNCHECKED
Definition: winuser.h:204
#define TPM_TOPALIGN
Definition: winuser.h:2419
#define WM_DRAWITEM
Definition: winuser.h:1673
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_NCCREATE
Definition: winuser.h:1711
#define MIIM_STATE
Definition: winuser.h:732
#define WM_ACTIVATE
Definition: winuser.h:1640
#define WM_SHOWWINDOW
Definition: winuser.h:1656
#define WM_SETTINGCHANGE
Definition: winuser.h:1657
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define HWND_TOP
Definition: winuser.h:1218
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MIIM_SUBMENU
Definition: winuser.h:734
#define WM_INITMENUPOPUP
Definition: winuser.h:1774
#define MF_ENABLED
Definition: winuser.h:128
#define MF_SEPARATOR
Definition: winuser.h:137
#define EM_SETLIMITTEXT
Definition: winuser.h:2040
#define COLOR_DESKTOP
Definition: winuser.h:925
#define TPM_LEFTALIGN
Definition: winuser.h:2413
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
struct tagNMHDR * LPNMHDR
#define HTCLIENT
Definition: winuser.h:2511
#define SWP_SHOWWINDOW
Definition: winuser.h:1259
#define SendMessage
Definition: winuser.h:5954
#define LoadCursor
Definition: winuser.h:5923
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5830
#define MFS_CHECKED
Definition: winuser.h:758
HDC WINAPI GetDC(_In_opt_ HWND)
#define SB_LINEDOWN
Definition: winuser.h:565
#define EM_SETSEL
Definition: winuser.h:2047
#define TPM_LEFTBUTTON
Definition: winuser.h:2415
#define WM_MEASUREITEM
Definition: winuser.h:1674
#define PostMessage
Definition: winuser.h:5943
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:1664
#define MK_LBUTTON
Definition: winuser.h:2403
#define VK_SHIFT
Definition: winuser.h:2238
#define SW_SHOW
Definition: winuser.h:786
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define WM_DESTROY
Definition: winuser.h:1637
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define SetWindowText
Definition: winuser.h:5968
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:3008
#define TPM_RETURNCMD
Definition: winuser.h:2423
#define GWL_STYLE
Definition: winuser.h:863
#define CS_PARENTDC
Definition: winuser.h:664
#define TranslateAccelerator
Definition: winuser.h:5971
#define WM_KEYLAST
Definition: winuser.h:1756
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WM_KILLFOCUS
Definition: winuser.h:1642
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2427
#define MIIM_DATA
Definition: winuser.h:737
#define MIIM_TYPE
Definition: winuser.h:736
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define WM_GETDLGCODE
Definition: winuser.h:1717
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)
const char * LPCSTR
Definition: xmlstorage.h:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char CHAR
Definition: xmlstorage.h:175