ReactOS 0.4.17-dev-684-ga6524ef
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_RefreshItem(INT iItem);
340 void LV_RefreshItems();
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 for (UINT iCol = 0; m_ListView.SetItemText(iItem, iCol, LPSTR_TEXTCALLBACK); ++iCol) {}
1505 m_ListView.Update(iItem);
1506}
1507
1509{
1511
1512 for (INT iItem = -1;;)
1513 {
1514 iItem = ListView_GetNextItem(m_ListView, iItem, LVNI_ALL);
1515 if (iItem == -1)
1516 break;
1517
1518 LV_RefreshItem(iItem);
1519 }
1520}
1521
1523{
1524 PITEMID_CHILD pidl = static_cast<PITEMID_CHILD>(ptr);
1525 CDefView *pThis = static_cast<CDefView *>(arg);
1526
1527 // in a commdlg this works as a filemask
1528 if (pThis->IncludeObject(pidl) == S_OK && pThis->m_ListView)
1529 pThis->LV_AddItem(pidl);
1530
1531 SHFree(pidl);
1532 return TRUE;
1533}
1534
1536// - gets the objectlist from the shellfolder
1537// - sorts the list
1538// - fills the list into the view
1540{
1541 CComPtr<IEnumIDList> pEnumIDList;
1542 PITEMID_CHILD pidl;
1543 DWORD dwFetched;
1544 HRESULT hRes;
1545 HDPA hdpa;
1546 DWORD dFlags = SHCONTF_NONFOLDERS | ((m_FolderSettings.fFlags & FWF_NOSUBFOLDERS) ? 0 : SHCONTF_FOLDERS);
1547
1548 TRACE("%p\n", this);
1549
1550 SHELLSTATE shellstate;
1552 if (GetCommDlgViewFlags() & CDB2GVF_SHOWALLFILES)
1553 shellstate.fShowAllObjects = shellstate.fShowSuperHidden = TRUE;
1554
1555 if (shellstate.fShowAllObjects)
1556 {
1557 dFlags |= SHCONTF_INCLUDEHIDDEN;
1558 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1559 }
1560 if (shellstate.fShowSuperHidden)
1561 {
1562 dFlags |= SHCONTF_INCLUDESUPERHIDDEN;
1563 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, LVIS_CUT, 0);
1564 }
1565
1566 // get the itemlist from the shfolder
1567 hRes = m_pSFParent->EnumObjects(m_hWnd, dFlags, &pEnumIDList);
1568 if (hRes != S_OK)
1569 {
1570 if (hRes == S_FALSE)
1571 return(NOERROR);
1572 return(hRes);
1573 }
1574
1575 // create a pointer array
1576 hdpa = DPA_Create(16);
1577 if (!hdpa)
1578 return(E_OUTOFMEMORY);
1579
1580 // copy the items into the array
1581 while((S_OK == pEnumIDList->Next(1, &pidl, &dwFetched)) && dwFetched)
1582 {
1583 if (DPA_AppendPtr(hdpa, pidl) == -1)
1584 {
1585 SHFree(pidl);
1586 }
1587 }
1588
1589 // turn listview's redrawing off
1591
1592 DPA_DestroyCallback( hdpa, fill_list, this);
1593
1594 /* sort the array */
1595 int sortCol = -1;
1596 if (!IsRefreshCommand && !m_sortInfo.bLoadedFromViewState) // Are we loading for the first time?
1597 {
1599 sortCol = 0; // In case the folder does not know/care
1600 if (m_pSF2Parent)
1601 {
1602 ULONG folderSortCol = sortCol, dummy;
1603 HRESULT hr = m_pSF2Parent->GetDefaultColumn(NULL, &folderSortCol, &dummy);
1604 if (SUCCEEDED(hr))
1605 hr = MapFolderColumnToListColumn(folderSortCol);
1606 if (SUCCEEDED(hr))
1607 sortCol = (int) hr;
1608 }
1609 }
1610 _Sort(sortCol);
1611
1613 {
1616 }
1617
1618 // load custom background image and custom text color
1621
1622 // turn listview's redrawing back on and force it to draw
1624
1626
1628 {
1629 // redraw now
1630 m_ListView.InvalidateRect(NULL, TRUE);
1631 }
1632
1633 if (IsRefreshCommand)
1635
1637
1638 return S_OK;
1639}
1640
1642{
1643 if (m_ListView.IsWindow())
1644 m_ListView.UpdateWindow();
1645 bHandled = FALSE;
1646 return 0;
1647}
1648
1650{
1651 return m_ListView.SendMessageW(uMsg, 0, 0);
1652}
1653
1655{
1656 if (!m_Destroyed)
1657 {
1658 m_Destroyed = TRUE;
1661 m_hNotify = NULL;
1662 m_ClipboardChain.Unhook(m_hWnd);
1663 if (m_pFileMenu)
1664 {
1666 m_pFileMenu = NULL;
1667 }
1668 if (m_hMenu)
1669 {
1671 m_hMenu = NULL;
1672 }
1675 }
1676 bHandled = FALSE;
1677 return 0;
1678}
1679
1681{
1682 /* redirect to parent */
1685
1686 bHandled = FALSE;
1687 return 0;
1688}
1689
1690static VOID
1692{
1693 INT x0 = prc->left, y0 = prc->top, x1 = prc->right, y1 = prc->bottom;
1694 x0 += dx;
1695 y0 += dy;
1696
1697 HDC hMemDC = CreateCompatibleDC(hDC);
1698 HGDIOBJ hbmOld = SelectObject(hMemDC, hbm);
1699
1700 for (INT y = y0; y < y1; y += nHeight)
1701 {
1702 for (INT x = x0; x < x1; x += nWidth)
1703 {
1704 BitBlt(hDC, x, y, nWidth, nHeight, hMemDC, 0, 0, SRCCOPY);
1705 }
1706 }
1707
1708 SelectObject(hMemDC, hbmOld);
1709 DeleteDC(hMemDC);
1710}
1711
1713{
1714 HDC hDC = (HDC)wParam;
1715
1716 RECT rc;
1718
1720 {
1721 BITMAP bm;
1722 if (::GetObject(m_viewinfo_data.hbmBack, sizeof(BITMAP), &bm))
1723 {
1727 }
1728 }
1729 else
1730 {
1732 }
1733
1734 bHandled = TRUE;
1735
1736 return TRUE;
1737}
1738
1740{
1741 /* Update desktop labels color */
1743
1744 /* Forward WM_SYSCOLORCHANGE to common controls */
1745 return m_ListView.SendMessageW(uMsg, 0, 0);
1746}
1747
1749{
1750 return reinterpret_cast<LRESULT>(m_pShellBrowser.p);
1751}
1752
1754{
1755 this->AddRef();
1756 bHandled = FALSE;
1757 return 0;
1758}
1759
1761{
1762 this->Release();
1763}
1764
1766{
1769
1770 TRACE("%p\n", this);
1771
1773 {
1774 if (FAILED(RegisterDragDrop(m_hWnd, pdt)))
1775 ERR("Error Registering DragDrop\n");
1776 }
1777
1778 /* register for receiving notifications */
1779 m_pSFParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
1780 if (ppf2)
1781 {
1782 ppf2->GetCurFolder(&m_pidlParent);
1783 }
1784
1785 if (CreateList())
1786 {
1787 if (InitList())
1788 {
1789 FillList(FALSE);
1790 }
1791 }
1792
1794 {
1795 HWND hwndSB;
1796 m_pShellBrowser->GetWindow(&hwndSB);
1798 }
1799
1800 // Set up change notification
1801 LPITEMIDLIST pidlTarget = NULL;
1802 LONG fEvents = 0;
1803 HRESULT hr = _DoFolderViewCB(SFVM_GETNOTIFY, (WPARAM)&pidlTarget, (LPARAM)&fEvents);
1804 if (FAILED(hr) || (!pidlTarget && !fEvents)) // FIXME: MSDN says both zero means no notifications
1805 {
1806 pidlTarget = m_pidlParent;
1807 fEvents = SHCNE_ALLEVENTS;
1808 }
1809 SHChangeNotifyEntry ntreg = {};
1811 if (FAILED(hr))
1812 {
1813 ntreg.fRecursive = FALSE;
1814 ntreg.pidl = pidlTarget;
1815 }
1819 fEvents, SHV_CHANGE_NOTIFY,
1820 1, &ntreg);
1821
1823
1824 int bForceFullStatusBar = false;
1825 BOOL bIsFileSystem = SHGetAttributes(NULL, m_pidlParent, SFGAO_FILESYSTEM) & SFGAO_FILESYSTEM;
1826 m_SpecialFolder = bIsFileSystem ? -1 : 0x7f; // FS folder or "generic" CSIDL
1828 {
1830 }
1831 else if (IsEqualPersistClassID(ppf2, CLSID_RecycleBin))
1832 {
1833 m_SpecialFolder = bForceFullStatusBar = CSIDL_BITBUCKET;
1834 }
1835 else if (bIsFileSystem)
1836 {
1838 if (ILIsParent(pidlNet, m_pidlParent, FALSE) && ILGetSize(pidlNet) < ILGetSize(m_pidlParent))
1840 }
1841 m_isFullStatusBar = bIsFileSystem || bForceFullStatusBar;
1842 _ForceStatusBarResize(); // This handles changing StatusBar parts
1845
1846 return S_OK;
1847}
1848
1849// #### Handling of the menus ####
1850
1852{
1854 if (!hFileMenu)
1855 return E_FAIL;
1856
1857 /* Cleanup the items added previously */
1858 for (int i = GetMenuItemCount(hFileMenu) - 1; i >= 0; i--)
1859 {
1860 UINT id = GetMenuItemID(hFileMenu, i);
1861 if (id < FCIDM_BROWSERFIRST || id > FCIDM_BROWSERLAST)
1862 DeleteMenu(hFileMenu, i, MF_BYPOSITION);
1863 }
1864
1865 // In case we still have this left over, clean it up
1866 if (m_pFileMenu)
1867 {
1870 }
1871 UINT selcount = m_ListView.GetSelectedCount();
1872 // Store context menu in m_pFileMenu and keep it to invoke the selected command later on
1875 return hr;
1876
1878
1880 hr = m_pFileMenu->QueryContextMenu(hmenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
1882 return hr;
1883
1884 // TODO: filter or something
1885 if (!selcount)
1886 {
1890 }
1891
1892 Shell_MergeMenus(hFileMenu, hmenu, 0, 0, 0xFFFF, MM_ADDSEPARATOR | MM_SUBMENUSHAVEIDS);
1894 return S_OK;
1895}
1896
1898{
1900 if (!hEditMenu)
1901 return E_FAIL;
1902
1903 HMENU hmenuContents = ::LoadMenuW(shell32_hInstance, L"MENU_003");
1904 if (!hmenuContents)
1905 return E_FAIL;
1906
1907 Shell_MergeMenus(hEditMenu, hmenuContents, 0, 0, 0xFFFF, 0);
1908
1909 ::DestroyMenu(hmenuContents);
1910
1911 return S_OK;
1912}
1913
1915{
1917 if (!hViewMenu)
1918 return E_FAIL;
1919
1921 if (!m_hMenuViewModes)
1922 return E_FAIL;
1923
1926
1927 return S_OK;
1928}
1929
1931{
1932 bool forceMerge = false;
1934
1935 // Make sure the column we currently sort by is in the menu
1938 {
1942 LVCOLUMN lvc;
1943 lvc.mask = LVCF_TEXT;
1944 lvc.pszText = buf;
1945 lvc.cchTextMax = _countof(buf);
1946 currentSortId = DVIDM_ARRANGESORT_LAST;
1947 forceMerge = true;
1949 AppendMenuItem(m_hMenuArrangeModes, MF_STRING, currentSortId, lvc.pszText, m_sortInfo.ListColumn);
1950 }
1951
1952 // Prepend the sort-by items unless they are aleady there
1953 if (GetMenuItemID(hmenuArrange, 0) == FCIDM_SHVIEW_AUTOARRANGE || forceMerge)
1954 {
1955 Shell_MergeMenus(hmenuArrange, m_hMenuArrangeModes, 0, 0, 0xFFFF, MM_ADDSEPARATOR);
1956 }
1957
1958 CheckMenuRadioItem(hmenuArrange,
1960 currentSortId, MF_BYCOMMAND);
1961
1963 {
1966 }
1967 else
1968 {
1971
1972 if (GetAutoArrange() == S_OK)
1974 else
1976
1977 if (_GetSnapToGrid() == S_OK)
1979 else
1981 }
1982
1983 return S_OK;
1984}
1985
1987{
1989 {
1990 UINT iItemFirst = FCIDM_SHVIEW_BIGICON;
1991 UINT iItemLast = iItemFirst + FVM_LAST - FVM_FIRST;
1992 UINT iItem = iItemFirst + m_FolderSettings.ViewMode - FVM_FIRST;
1993 CheckMenuRadioItem(hmenuView, iItemFirst, iItemLast, iItem, MF_BYCOMMAND);
1994 }
1995
1996 return S_OK;
1997}
1998
2000{
2001 const UINT maxItems = 15; // Feels about right
2002 const UINT idMore = 0x1337;
2003 UINT idFirst = idMore + 1, idLast = idFirst;
2004 UINT lastValidListCol = 0; // Keep track of where the new column should be inserted
2005 UINT showMore = GetKeyState(VK_SHIFT) < 0;
2007 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
2008
2009 if (lParam == ~0)
2010 {
2011 RECT r;
2012 ::GetWindowRect(hWndHdr, &r);
2013 pt.x = r.left + ((r.right - r.left) / 2);
2014 pt.y = r.top + ((r.bottom - r.top) / 2);
2015 }
2016
2017 HMENU hMenu = CreatePopupMenu();
2018 if (!hMenu)
2019 return 0;
2020
2021 for (UINT foldCol = 0;; ++foldCol)
2022 {
2025 sd.str.uType = !STRRET_WSTR;
2026 if (FAILED(GetDetailsByFolderColumn(NULL, foldCol, sd)))
2027 break;
2028 if (FAILED(StrRetToStrNW(buf, _countof(buf), &sd.str, NULL)))
2029 break;
2030
2031 SHCOLSTATEF state = 0;
2032 if (!m_pSF2Parent || FAILED(m_pSF2Parent->GetDefaultColumnState(foldCol, &state)))
2033 state = 0;
2034 showMore |= (state & (SHCOLSTATE_SECONDARYUI));
2035
2036 UINT mf = MF_STRING;
2037 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
2038
2039 if (foldCol == 0)
2040 mf |= MF_CHECKED | MF_GRAYED | MF_DISABLED; // Force column 0
2042 continue;
2043 else if (SUCCEEDED(listCol))
2044 mf |= MF_CHECKED;
2045
2046 if (AppendMenuItem(hMenu, mf, idLast, buf, lastValidListCol + 1))
2047 {
2048 idLast++;
2049 if (SUCCEEDED(listCol))
2050 lastValidListCol = listCol;
2051 }
2052
2053 if (idLast - idFirst == maxItems)
2054 {
2055 showMore++;
2056 break;
2057 }
2058 }
2059
2060 if (showMore)
2061 {
2062#if 0 // TODO
2063 InsertMenuW(hMenu, -1, MF_SEPARATOR, 0, NULL);
2064 InsertMenuW(hMenu, -1, MF_STRING, idMore, L"More...");
2065#endif
2066 }
2067
2068 // A cludge to force the cursor to update so we are not stuck with "size left/right" if
2069 // the right-click was on a column divider.
2071
2072 // Note: Uses the header as the owner so CDefView::OnInitMenuPopup does not mess us up.
2074 pt.x, pt.y, 0, hWndHdr, NULL);
2075 if (idCmd == idMore)
2076 {
2077 FIXME("Open More dialog\n");
2078 }
2079 else if (idCmd)
2080 {
2081 UINT foldCol = idCmd - idFirst;
2082 HRESULT listCol = MapFolderColumnToListColumn(foldCol);
2083 if (SUCCEEDED(listCol))
2084 {
2085 ListView_DeleteColumn(m_ListView.m_hWnd, listCol);
2086 }
2087 else
2088 {
2089 listCol = (UINT) GetMenuItemDataById(hMenu, idCmd);
2090 LoadColumn(foldCol, listCol, TRUE);
2091 }
2093 }
2094 DestroyMenu(hMenu);
2095 return 0;
2096}
2097
2098/**********************************************************
2099* ShellView_GetSelections()
2100*
2101* - fills the m_apidl list with the selected objects
2102*
2103* RETURNS
2104* number of selected items
2105*/
2107{
2109 if (count > m_cidl || !count || !m_apidl) // !count to free possibly large cache, !m_apidl to make sure m_apidl is a valid pointer
2110 {
2111 SHFree(m_apidl);
2112 m_apidl = static_cast<PCUITEMID_CHILD*>(SHAlloc(count * sizeof(PCUITEMID_CHILD)));
2113 if (!m_apidl)
2114 {
2115 m_cidl = 0;
2116 return 0;
2117 }
2118 }
2119 m_cidl = count;
2120
2121 TRACE("-- Items selected =%u\n", m_cidl);
2122
2124
2125 UINT i = 0;
2126 int lvIndex = -1;
2127 while ((lvIndex = m_ListView.GetNextItem(lvIndex, LVNI_SELECTED)) > -1)
2128 {
2129 m_apidl[i] = _PidlByItem(lvIndex);
2130 i++;
2131 if (i == m_cidl)
2132 break;
2133 TRACE("-- selected Item found\n");
2134 }
2135
2136 return m_cidl;
2137}
2138
2140{
2141 if (!GetSelections())
2142 return 0;
2143 SFGAOF Attr = Query;
2144 return SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &Attr)) ? (Attr & Query) : 0;
2145}
2146
2148{
2149 CMINVOKECOMMANDINFOEX cmi;
2150
2151 ZeroMemory(&cmi, sizeof(cmi));
2152 cmi.cbSize = sizeof(cmi);
2153 cmi.hwnd = m_hWnd;
2154 cmi.lpVerb = lpVerb;
2155 cmi.nShow = SW_SHOW;
2156
2157 WCHAR szverbW[sizeof("properties")];
2158 static const WORD verbmap[] = { FCIDM_SHVIEW_DELETE, FCIDM_SHVIEW_RENAME,
2161 for (SIZE_T i = 0; TryMapVerb && i < _countof(verbmap); ++i)
2162 {
2163 if (cmi.lpVerb != MAKEINTRESOURCEA(verbmap[i]))
2164 continue;
2165 if (PCSTR pszverbA = MapFcidmCmdToVerb((UINT_PTR)cmi.lpVerb))
2166 {
2167 // Map our internal commands to canonical verbs so non-shell32 menus can understand us
2168 SHAnsiToUnicode(pszverbA, szverbW, _countof(szverbW));
2169 cmi.lpVerb = pszverbA;
2170 cmi.lpVerbW = szverbW;
2171 break;
2172 }
2173 }
2174
2175 if (GetKeyState(VK_SHIFT) < 0)
2176 cmi.fMask |= CMIC_MASK_SHIFT_DOWN;
2177
2178 if (GetKeyState(VK_CONTROL) < 0)
2179 cmi.fMask |= CMIC_MASK_CONTROL_DOWN;
2180
2181 if (pt)
2182 {
2183 cmi.fMask |= CMIC_MASK_PTINVOKE;
2184 cmi.ptInvoke = *pt;
2185 }
2186
2187 WCHAR szDirW[MAX_PATH] = L"";
2188 CHAR szDirA[MAX_PATH];
2190 *szDirW != UNICODE_NULL)
2191 {
2192 SHUnicodeToAnsi(szDirW, szDirA, _countof(szDirA));
2193 cmi.fMask |= CMIC_MASK_UNICODE;
2194 cmi.lpDirectory = szDirA;
2195 cmi.lpDirectoryW = szDirW;
2196 }
2197
2198 HRESULT hr = pCM->InvokeCommand((LPCMINVOKECOMMANDINFO)&cmi);
2199 // Most of our callers will do this, but if they would forget (File menu!)
2200 IUnknown_SetSite(pCM, NULL);
2201 pCM.Release();
2202
2204 return hr;
2205
2206 return S_OK;
2207}
2208
2210{
2211 HMENU hMenu;
2212 UINT uCommand;
2213 HRESULT hResult;
2214
2215 if (m_ListView.GetSelectedCount() == 0)
2216 return S_OK;
2217
2218 hResult = OnDefaultCommand();
2219 if (hResult == S_OK)
2220 return hResult;
2221
2222 hMenu = CreatePopupMenu();
2223 if (!hMenu)
2224 return E_FAIL;
2225
2228 MenuCleanup _(pCM, hMenu);
2229 if (FAILED_UNEXPECTEDLY(hResult))
2230 return hResult;
2231
2232 UINT cmf = CMF_DEFAULTONLY | GetContextMenuFlags(m_pShellBrowser, 0);
2233 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, cmf);
2234 if (FAILED_UNEXPECTEDLY(hResult))
2235 return hResult;
2236
2237 uCommand = GetMenuDefaultItem(hMenu, FALSE, 0);
2238 if (uCommand == (UINT)-1 && !pszVerb)
2239 {
2240 ERR("GetMenuDefaultItem returned -1\n");
2241 return E_FAIL;
2242 }
2243 if (!pszVerb)
2244 pszVerb = MAKEINTRESOURCEA(uCommand);
2245
2246 InvokeContextMenuCommand(pCM, pszVerb, NULL);
2247
2248 return hResult;
2249}
2250
2252{
2254 UINT uCommand;
2255 HRESULT hResult;
2256
2257 TRACE("(%p)\n", this);
2258
2259 if (m_hContextMenu != NULL)
2260 {
2261 ERR("HACK: Aborting context menu in nested call\n");
2262 return 0;
2263 }
2264
2265 HWND hWndHdr = ListView_GetHeader(m_ListView.m_hWnd);
2266 RECT r;
2267 if (::GetWindowRect(hWndHdr, &r) && PtInRect(&r, pt) && ::IsWindowVisible(hWndHdr))
2268 {
2270 }
2271
2273 if (!m_hContextMenu)
2274 return E_FAIL;
2275
2276 if (lParam != ~0) // unless app key (menu key) was pressed
2277 {
2278 LV_HITTESTINFO hittest = { pt };
2279 ScreenToClient(&hittest.pt);
2280 m_ListView.HitTest(&hittest);
2281
2282 // Right-Clicked item is selected? If selected, no selection change.
2283 // If not selected, then reset the selection and select the item.
2284 if ((hittest.flags & LVHT_ONITEM) &&
2286 {
2287 SelectItem(hittest.iItem, SVSI_SELECT | SVSI_DESELECTOTHERS | SVSI_ENSUREVISIBLE);
2288 }
2289 }
2290
2292 // In case we still have this left over, clean it up
2295 if (FAILED_UNEXPECTEDLY(hResult))
2296 return 0;
2297
2299 // Use 1 as the first id we want. 0 means that user canceled the menu
2300 hResult = m_pCM->QueryContextMenu(m_hContextMenu, 0, CONTEXT_MENU_BASE_ID, DVIDM_CONTEXTMENU_LAST, cmf);
2301 if (FAILED_UNEXPECTEDLY(hResult))
2302 return 0;
2303
2304 if (m_pCommDlgBrowser && !(GetCommDlgViewFlags() & CDB2GVF_NOSELECTVERB))
2305 {
2306 HMENU hMenuSource = LoadMenuW(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCEW(IDM_DVSELECT));
2308 DestroyMenu(hMenuSource);
2310 // TODO: ICommDlgBrowser2::GetDefaultMenuText == S_OK
2311 }
2312
2313 // There is no position requested, so try to find one
2314 if (lParam == ~0)
2315 {
2316 HWND hFocus = ::GetFocus();
2317 int lvIndex = -1;
2318
2319 if (hFocus == m_ListView.m_hWnd || m_ListView.IsChild(hFocus))
2320 {
2321 // Is there an item focused and selected?
2323 // If not, find the first selected item
2324 if (lvIndex < 0)
2325 lvIndex = m_ListView.GetNextItem(-1, LVNI_SELECTED);
2326 }
2327
2328 // We got something
2329 if (lvIndex > -1)
2330 {
2331 // Find the center of the icon
2332 RECT rc = { LVIR_ICON };
2333 m_ListView.SendMessage(LVM_GETITEMRECT, lvIndex, (LPARAM)&rc);
2334 pt.x = (rc.right + rc.left) / 2;
2335 pt.y = (rc.bottom + rc.top) / 2;
2336 }
2337 else
2338 {
2339 // We have to drop it somewhere
2340 pt.x = pt.y = 0;
2341 }
2342
2343 m_ListView.ClientToScreen(&pt);
2344 }
2345
2348 pcdb2->Notify(static_cast<IShellView*>(this), CDB2N_CONTEXTMENU_START);
2349
2350 // This runs the message loop, calling back to us with f.e. WM_INITPOPUP (hence why m_hContextMenu and m_pCM exist)
2351 uCommand = TrackPopupMenu(m_hContextMenu,
2353 pt.x, pt.y, 0, m_hWnd, NULL);
2354 if (uCommand >= DVIDM_ARRANGESORT_FIRST && uCommand <= DVIDM_ARRANGESORT_LAST)
2355 {
2356 SendMessage(WM_COMMAND, uCommand, 0);
2357 }
2358 else if (uCommand != 0 && !(uCommand == DVIDM_COMMDLG_SELECT && OnDefaultCommand() == S_OK))
2359 {
2361 }
2362
2363 if (pcdb2)
2364 pcdb2->Notify(static_cast<IShellView*>(this), CDB2N_CONTEXTMENU_DONE);
2365 return 0;
2366}
2367
2369{
2370 HRESULT hResult;
2371 HMENU hMenu = NULL;
2372
2374 hResult = GetItemObject(bUseSelection ? SVGIO_SELECTION : SVGIO_BACKGROUND, IID_PPV_ARG(IContextMenu, &pCM));
2375 if (FAILED_UNEXPECTEDLY(hResult))
2376 return 0;
2377
2378 MenuCleanup _(pCM, hMenu);
2379
2380 if ((uCommand != FCIDM_SHVIEW_DELETE) && (uCommand != FCIDM_SHVIEW_RENAME))
2381 {
2382 hMenu = CreatePopupMenu();
2383 if (!hMenu)
2384 return 0;
2385
2386 hResult = pCM->QueryContextMenu(hMenu, 0, DVIDM_CONTEXTMENU_FIRST, DVIDM_CONTEXTMENU_LAST, CMF_NORMAL);
2387 if (FAILED_UNEXPECTEDLY(hResult))
2388 return 0;
2389 }
2390
2391 if (bUseSelection)
2392 {
2393 // FIXME: we should cache this
2394 SFGAOF rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER;
2395 hResult = m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &rfg);
2396 if (FAILED_UNEXPECTEDLY(hResult))
2397 return 0;
2398
2399 if (!(rfg & SFGAO_CANMOVE) && uCommand == FCIDM_SHVIEW_CUT)
2400 return 0;
2401 if (!(rfg & SFGAO_CANCOPY) && uCommand == FCIDM_SHVIEW_COPY)
2402 return 0;
2403 if (!(rfg & SFGAO_CANDELETE) && uCommand == FCIDM_SHVIEW_DELETE)
2404 return 0;
2405 if (!(rfg & SFGAO_CANRENAME) && uCommand == FCIDM_SHVIEW_RENAME)
2406 return 0;
2407 if (!(rfg & SFGAO_HASPROPSHEET) && uCommand == FCIDM_SHVIEW_PROPERTIES)
2408 return 0;
2409 }
2410
2411 // FIXME: We should probably use the objects position?
2412 InvokeContextMenuCommand(pCM, MAKEINTRESOURCEA(uCommand), NULL, true);
2413 return 0;
2414}
2415
2416// ##### message handling #####
2417
2419{
2420 WORD wWidth, wHeight;
2421
2422 wWidth = LOWORD(lParam);
2423 wHeight = HIWORD(lParam);
2424
2425 TRACE("%p width=%u height=%u\n", this, wWidth, wHeight);
2426
2427 // WM_SIZE can come before WM_CREATE
2428 if (!m_ListView)
2429 return 0;
2430
2431 /* Resize the ListView to fit our window */
2432 ::MoveWindow(m_ListView, 0, 0, wWidth, wHeight, TRUE);
2433
2435
2438
2439 return 0;
2440}
2441
2442// internal
2444{
2445 TRACE("%p\n", this);
2446
2448 {
2449 // TODO: cleanup menu after deactivation
2451 }
2452}
2453
2455{
2456 TRACE("%p uState=%x\n", this, uState);
2457
2458 // don't do anything if the state isn't really changing
2459 if (m_uState == uState)
2460 {
2461 return;
2462 }
2463
2464 if (uState == SVUIA_DEACTIVATE)
2465 {
2466 OnDeactivate();
2467 }
2468 else
2469 {
2471 {
2472 FillEditMenu();
2473 FillViewMenu();
2474 m_pShellBrowser->SetMenuSB(m_hMenu, 0, m_hWnd);
2476 }
2477
2478 if (SVUIA_ACTIVATE_FOCUS == uState)
2479 {
2480 m_ListView.SetFocus();
2481 }
2482 }
2483
2484 m_uState = uState;
2485 TRACE("--\n");
2486}
2487
2489{
2490 if (GetSelections())
2491 CCopyMoveToMenu::DoCopyMoveToFolder(bCopy, m_hWnd, static_cast<IDropTarget*>(this),
2493}
2494
2496{
2498 return 0;
2499}
2500
2502{
2503 TRACE("%p\n", this);
2504
2505 /* Tell the browser one of our windows has received the focus. This
2506 should always be done before merging menus (OnActivate merges the
2507 menus) if one of our windows has the focus.*/
2508
2509 m_pShellBrowser->OnViewWindowActive(this);
2511
2512 /* Set the focus to the listview */
2513 m_ListView.SetFocus();
2514
2515 /* Notify the ICommDlgBrowser interface */
2516 OnStateChange(CDBOSC_SETFOCUS);
2517
2518 return 0;
2519}
2520
2522{
2523 TRACE("(%p) stub\n", this);
2524
2526 /* Notify the ICommDlgBrowser */
2527 OnStateChange(CDBOSC_KILLFOCUS);
2528
2529 return 0;
2530}
2531
2532// the CmdID's are the ones from the context menu
2534{
2535 DWORD dwCmdID;
2536 DWORD dwCmd;
2537 HWND hwndCmd;
2538 int nCount;
2539
2540 dwCmdID = GET_WM_COMMAND_ID(wParam, lParam);
2542 hwndCmd = GET_WM_COMMAND_HWND(wParam, lParam);
2543
2544 TRACE("(%p)->(0x%08x 0x%08x %p) stub\n", this, dwCmdID, dwCmd, hwndCmd);
2545
2546 if (dwCmdID >= DVIDM_ARRANGESORT_FIRST && dwCmdID <= DVIDM_ARRANGESORT_LAST)
2547 {
2548 UINT listCol = (UINT)GetMenuItemDataById(m_hMenuArrangeModes, dwCmdID);
2549 _Sort(listCol);
2550 return 0;
2551 }
2552
2553 switch (dwCmdID)
2554 {
2559 case 0x702D:
2561 case 0x702F:
2563 break;
2566 break;
2568 if (_GetSnapToGrid() == S_OK)
2570 else
2571 ArrangeGrid();
2572 break;
2574 if (GetAutoArrange() == S_OK)
2575 m_ListView.ModifyStyle(LVS_AUTOARRANGE, 0);
2576 else
2577 AutoArrange();
2578 break;
2582 break;
2584 nCount = m_ListView.GetItemCount();
2585 for (int i=0; i < nCount; i++)
2587 break;
2590 break;
2592 Refresh();
2593 break;
2595 case FCIDM_SHVIEW_CUT:
2596 case FCIDM_SHVIEW_COPY:
2600 return 0;
2601 return OnExplorerCommand(dwCmdID, TRUE);
2605 return 0;
2607 case FCIDM_SHVIEW_UNDO:
2610 return OnExplorerCommand(dwCmdID, FALSE);
2611 default:
2612 // WM_COMMAND messages from file menu are routed to CDefView to let m_pFileMenu handle them
2613 if (m_pFileMenu && dwCmd == 0)
2614 {
2615 HMENU Dummy = NULL;
2616 MenuCleanup _(m_pFileMenu, Dummy);
2618 }
2619 }
2620
2621 return 0;
2622}
2623
2624static BOOL
2626{
2627 HKEY hKey;
2628 LONG error;
2629 DWORD dwValue = FALSE, cbValue;
2630
2632 if (error)
2633 return dwValue;
2634
2635 cbValue = sizeof(dwValue);
2636 RegQueryValueExW(hKey, L"SelectExtOnRename", NULL, NULL, (LPBYTE)&dwValue, &cbValue);
2637
2639 return !!dwValue;
2640}
2641
2643{
2644 UINT CtlID;
2645 LPNMHDR lpnmh;
2646 LPNMLISTVIEW lpnmlv;
2647 NMLVDISPINFOW *lpdi;
2648 PCUITEMID_CHILD pidl;
2649 BOOL unused;
2650
2651 CtlID = wParam;
2652 lpnmh = (LPNMHDR)lParam;
2653 lpnmlv = (LPNMLISTVIEW)lpnmh;
2654 lpdi = (NMLVDISPINFOW *)lpnmh;
2655
2656 TRACE("%p CtlID=%u lpnmh->code=%x\n", this, CtlID, lpnmh->code);
2657
2658 switch (lpnmh->code)
2659 {
2660 case NM_SETFOCUS:
2661 TRACE("-- NM_SETFOCUS %p\n", this);
2662 OnSetFocus(0, 0, 0, unused);
2663 break;
2664 case NM_KILLFOCUS:
2665 TRACE("-- NM_KILLFOCUS %p\n", this);
2666 OnDeactivate();
2667 /* Notify the ICommDlgBrowser interface */
2668 OnStateChange(CDBOSC_KILLFOCUS);
2669 break;
2670 case NM_CUSTOMDRAW:
2671 TRACE("-- NM_CUSTOMDRAW %p\n", this);
2672 return CDRF_DODEFAULT;
2673 case NM_RELEASEDCAPTURE:
2674 TRACE("-- NM_RELEASEDCAPTURE %p\n", this);
2675 break;
2676 case NM_CLICK:
2677 TRACE("-- NM_CLICK %p\n", this);
2678 break;
2679 case NM_RCLICK:
2680 TRACE("-- NM_RCLICK %p\n", this);
2681 break;
2682 case NM_DBLCLK:
2683 TRACE("-- NM_DBLCLK %p\n", this);
2684 break;
2685 case NM_RETURN:
2686 TRACE("-- NM_RETURN %p\n", this);
2687 break;
2688 case HDN_ENDTRACKW:
2689 TRACE("-- HDN_ENDTRACKW %p\n", this);
2690 //nColumn1 = m_ListView.GetColumnWidth(0);
2691 //nColumn2 = m_ListView.GetColumnWidth(1);
2692 break;
2693 case LVN_DELETEITEM:
2694 TRACE("-- LVN_DELETEITEM %p\n", this);
2695 /*delete the pidl because we made a copy of it*/
2696 SHFree(reinterpret_cast<LPVOID>(lpnmlv->lParam));
2697 break;
2698 case LVN_DELETEALLITEMS:
2699 TRACE("-- LVN_DELETEALLITEMS %p\n", this);
2700 return FALSE;
2701 case LVN_INSERTITEM:
2702 TRACE("-- LVN_INSERTITEM (STUB)%p\n", this);
2703 break;
2704 case LVN_ITEMACTIVATE:
2705 TRACE("-- LVN_ITEMACTIVATE %p\n", this);
2706 OpenSelectedItems(((NMITEMACTIVATE *)lpnmh)->uKeyFlags & LVKF_ALT ? "properties" : NULL);
2707 break;
2708 case LVN_COLUMNCLICK:
2709 {
2710 UINT foldercol = MapListColumnToFolderColumn(lpnmlv->iSubItem);
2711 HRESULT hr = S_FALSE;
2712 if (m_pSDParent)
2713 hr = m_pSDParent->ColumnClick(foldercol);
2714 if (hr != S_OK)
2715 hr = _DoFolderViewCB(SFVM_COLUMNCLICK, foldercol, 0);
2716 if (hr != S_OK)
2717 _Sort(lpnmlv->iSubItem);
2718 break;
2719 }
2720 case LVN_GETDISPINFOA:
2721 case LVN_GETDISPINFOW:
2722 TRACE("-- LVN_GETDISPINFO %p\n", this);
2723 pidl = _PidlByItem(lpdi->item);
2724
2725 if (lpdi->item.mask & LVIF_TEXT) /* text requested */
2726 {
2729 break;
2730
2731 if (lpnmh->code == LVN_GETDISPINFOA)
2732 {
2733 /* shouldn't happen */
2734 NMLVDISPINFOA *lpdiA = (NMLVDISPINFOA *)lpnmh;
2735 StrRetToStrNA( lpdiA->item.pszText, lpdiA->item.cchTextMax, &sd.str, NULL);
2736 TRACE("-- text=%s\n", lpdiA->item.pszText);
2737 }
2738 else /* LVN_GETDISPINFOW */
2739 {
2740 StrRetToStrNW( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL);
2741 TRACE("-- text=%s\n", debugstr_w(lpdi->item.pszText));
2742 }
2743 }
2744 if (lpdi->item.mask & LVIF_IMAGE)
2745 {
2747 }
2748 if (lpdi->item.mask & LVIF_STATE)
2749 {
2750 if ((lpdi->item.stateMask & LVIS_CUT) && GetItemAttributes(pidl, SFGAO_HIDDEN | SFGAO_GHOSTED))
2751 lpdi->item.state |= LVIS_CUT;
2752 }
2753 lpdi->item.mask |= LVIF_DI_SETITEM;
2754 break;
2755 case LVN_ITEMCHANGED:
2756 TRACE("-- LVN_ITEMCHANGED %p\n", this);
2757 if ((lpnmlv->uOldState ^ lpnmlv->uNewState) & (LVIS_SELECTED | LVIS_FOCUSED))
2758 {
2759 OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject
2760 // FIXME: Use LVIS_DROPHILITED instead in drag_notify_subitem
2762 {
2765 }
2766 _DoFolderViewCB(SFVM_SELECTIONCHANGED, NULL/* FIXME */, NULL/* FIXME */);
2767 }
2768 break;
2769 case LVN_BEGINDRAG:
2770 case LVN_BEGINRDRAG:
2771 TRACE("-- LVN_BEGINDRAG\n");
2772 if (GetSelections())
2773 {
2775 DWORD dwAttributes = SFGAO_CANCOPY | SFGAO_CANLINK;
2776 DWORD dwEffect = DROPEFFECT_MOVE;
2777
2778 if (SUCCEEDED(m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, IID_NULL_PPV_ARG(IDataObject, &pda))))
2779 {
2781
2782 if (SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, m_apidl, &dwAttributes)))
2783 dwEffect |= dwAttributes & (SFGAO_CANCOPY | SFGAO_CANLINK);
2784
2786 if (SUCCEEDED(pda->QueryInterface(IID_PPV_ARG(IAsyncOperation, &piaso))))
2787 piaso->SetAsyncMode(TRUE);
2788
2789 DWORD dwEffect2;
2790
2791 m_pSourceDataObject = pda;
2792 m_ptFirstMousePos = params->ptAction;
2795
2796 HIMAGELIST big_icons, small_icons;
2797 Shell_GetImageLists(&big_icons, &small_icons);
2798 PCUITEMID_CHILD pidl = _PidlByItem(params->iItem);
2799 int iIcon = SHMapPIDLToSystemImageListIndex(m_pSFParent, pidl, 0);
2800 POINT ptItem;
2801 m_ListView.GetItemPosition(params->iItem, &ptItem);
2802
2803 ImageList_BeginDrag(big_icons, iIcon, params->ptAction.x - ptItem.x, params->ptAction.y - ptItem.y);
2804 DoDragDrop(pda, this, dwEffect, &dwEffect2);
2806 }
2807 }
2808 break;
2810 {
2811 TRACE("-- LVN_BEGINLABELEDITW %p\n", this);
2813 pidl = _PidlByItem(lpdi->item);
2814 DWORD fAttr = pidl ? GetItemAttributes(pidl, SFGAO_CANRENAME | SFGAO_FOLDER | SFGAO_FILESYSTEM) : 0;
2815 if (!hEdit || !(fAttr & SFGAO_CANRENAME))
2816 {
2817 MessageBeep(0xffffffff);
2818 return TRUE;
2819 }
2820
2821 WCHAR szName[MAX_PATH], *pszText = lpdi->item.pszText;
2822 if (SUCCEEDED(DisplayNameOfW(m_pSFParent, pidl, SHGDN_FOREDITING | SHGDN_INFOLDER,
2824 {
2825 pszText = szName;
2826 ::SetWindowText(hEdit, pszText);
2827 }
2828
2829 // smartass-renaming: See CORE-15242
2830 if (!(fAttr & SFGAO_FOLDER) && (fAttr & SFGAO_FILESYSTEM) &&
2831 (lpdi->item.mask & LVIF_TEXT) && !SelectExtOnRename())
2832 {
2834 WCHAR szFullPath[MAX_PATH];
2835 if (SHGetPathFromIDListW(pidlFull, szFullPath) && !SHELL_FS_HideExtension(szFullPath))
2836 {
2837 LPWSTR pchDotExt = PathFindExtensionW(pszText);
2838 ::PostMessageW(hEdit, EM_SETSEL, 0, pchDotExt - pszText);
2840 }
2841 }
2842
2843 INT cchLimit = 0;
2844 _DoFolderViewCB(SFVM_GETNAMELENGTH, (WPARAM)pidl, (LPARAM)&cchLimit);
2845 if (cchLimit)
2846 ::SendMessageW(hEdit, EM_SETLIMITTEXT, cchLimit, 0);
2848 m_isEditing = TRUE;
2849 return FALSE;
2850 }
2851 case LVN_ENDLABELEDITW:
2852 {
2853 TRACE("-- LVN_ENDLABELEDITW %p\n", this);
2855 if (!lpdi->item.pszText)
2856 return TRUE;
2857
2858 pidl = _PidlByItem(lpdi->item);
2859 // We have to copy the old PIDL because SetNameOf might generate a SHCNE_UPDATEITEM
2860 // and that notification can cause us to call LV_UpdateItem and free the old PIDL too soon.
2862 if (!pidlOld)
2863 {
2865 return FALSE;
2866 }
2867 PITEMID_CHILD pidlNew = NULL;
2868 HRESULT hr = m_pSFParent->SetNameOf(0, pidlOld, lpdi->item.pszText, SHGDN_INFOLDER, &pidlNew);
2869 if (SUCCEEDED(hr) && pidlNew)
2870 {
2871 int iNew = LV_FindItemByPidl(pidlNew);
2872 if (iNew != lpdi->item.iItem && iNew >= 0)
2873 ILFree(pidlNew);// A SHCNE has updated the item already
2874 else if (!LV_UpdateItem(lpdi->item.iItem, pidlNew))
2875 ILFree(pidlNew);
2876 OnStateChange(CDBOSC_RENAME);
2877 }
2878 else
2879 {
2880 ::PostMessageW(m_ListView, LVM_EDITLABEL, lpdi->item.iItem, 0); // Renaming failed, let the user try again
2881 }
2882 return FALSE;
2883 }
2884 default:
2885 TRACE("-- %p WM_COMMAND %x unhandled\n", this, lpnmh->code);
2886 break;
2887 }
2888
2889 return 0;
2890}
2891
2892// This is just a quick hack to make the desktop work correctly.
2893// ITranslateShellChangeNotify's IsChildID is undocumented, but most likely the
2894// way that a folder should know if it should update upon a change notification.
2895// It is exported by merged folders at a minimum.
2897{
2898 if (!pidl1 || !pidl2)
2899 return FALSE;
2900 if (ILIsParent(pidl1, pidl2, TRUE))
2901 return TRUE;
2902
2903 CComHeapPtr<ITEMIDLIST_ABSOLUTE> pidl2Clone(ILClone(pidl2));
2904 ILRemoveLastID(pidl2Clone);
2905 return ILIsEqual(pidl1, pidl2Clone);
2906}
2907
2909{
2910 // The change notify can come before WM_CREATE
2911 if (!m_ListView)
2912 return FALSE;
2913
2914 HANDLE hChange = (HANDLE)wParam;
2915 DWORD dwProcID = (DWORD)lParam;
2916 PIDLIST_ABSOLUTE *Pidls;
2917 LONG lEvent;
2918 HANDLE hLock = SHChangeNotification_Lock(hChange, dwProcID, &Pidls, &lEvent);
2919 if (hLock == NULL)
2920 {
2921 ERR("hLock == NULL\n");
2922 return FALSE;
2923 }
2924 lEvent &= ~SHCNE_INTERRUPT;
2925 TRACE("(%p)(%p,%p,%p) %#x\n", this, Pidls[0], Pidls[1], lParam, lEvent);
2926
2928 {
2930 return FALSE;
2931 }
2932
2933 // Translate child IDLs.
2934 // SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes)
2935 HRESULT hr;
2936 PITEMID_CHILD child0 = NULL, child1 = NULL;
2937 CComHeapPtr<ITEMIDLIST_RELATIVE> pidl0Temp, pidl1Temp;
2939 {
2940 if (_ILIsSpecialFolder(Pidls[0]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[0]))
2941 {
2942 child0 = ILFindLastID(Pidls[0]);
2943 hr = SHGetRealIDL(m_pSFParent, child0, &pidl0Temp);
2944 if (SUCCEEDED(hr))
2945 child0 = pidl0Temp;
2946 }
2947 if (_ILIsSpecialFolder(Pidls[1]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[1]))
2948 {
2949 child1 = ILFindLastID(Pidls[1]);
2950 hr = SHGetRealIDL(m_pSFParent, child1, &pidl1Temp);
2951 if (SUCCEEDED(hr))
2952 child1 = pidl1Temp;
2953 }
2954 }
2955
2956 switch (lEvent)
2957 {
2958 case SHCNE_MKDIR:
2959 case SHCNE_CREATE:
2960 case SHCNE_DRIVEADD:
2961 if (!child0)
2962 break;
2963 if (LV_FindItemByPidl(child0) < 0)
2964 LV_AddItem(child0);
2965 else
2966 LV_UpdateItem(child0);
2967 break;
2968 case SHCNE_RMDIR:
2969 case SHCNE_DELETE:
2970 case SHCNE_DRIVEREMOVED:
2971 if (child0)
2972 LV_DeleteItem(child0);
2973 break;
2974 case SHCNE_RENAMEFOLDER:
2975 case SHCNE_RENAMEITEM:
2976 if (child0 && child1)
2977 LV_RenameItem(child0, child1);
2978 else if (child0)
2979 LV_DeleteItem(child0);
2980 else if (child1)
2981 LV_AddItem(child1);
2982 break;
2983 case SHCNE_UPDATEITEM:
2984 if (child0)
2985 LV_UpdateItem(child0);
2986 break;
2987 case SHCNE_UPDATEIMAGE:
2989 case SHCNE_MEDIAREMOVED:
2990 case SHCNE_ASSOCCHANGED:
2992 break;
2993 case SHCNE_UPDATEDIR:
2994 case SHCNE_ATTRIBUTES:
2995 if (child0)
2996 LV_UpdateItem(child0);
2997 else
2998 Refresh();
3000 break;
3001 case SHCNE_FREESPACE:
3003 break;
3004 }
3005
3007 return TRUE;
3008}
3009
3011{
3012 if (!m_pCM)
3013 {
3014 /* no menu */
3015 ERR("no context menu\n");
3016 return FALSE;
3017 }
3018 LRESULT result = 0;
3020 return SUCCEEDED(hres);
3021}
3022
3024{
3025 /* Wallpaper setting affects drop shadows effect */
3026 if (wParam == SPI_SETDESKWALLPAPER || wParam == 0)
3028
3030 UINT ListExBits = GetItemActivateFlags();
3032 (lParam && !lstrcmpiW((PWSTR)lParam, REGSTR_PATH_EXPLORER L"\\IconUnderline")))
3033 {
3035 ListExBits |= SHELL_GetIconUnderlineFlags();
3036 }
3037 m_ListView.SetExtendedListViewStyle(ListExBits, ListExMask);
3038 m_ListView.SendMessage(uMsg, wParam, lParam);
3039 return S_OK;
3040}
3041
3043{
3044 HMENU hmenu = (HMENU) wParam;
3045 int nPos = LOWORD(lParam);
3046 UINT menuItemId;
3047
3048 if (m_isEditing)
3050 if (m_pCM)
3051 OnMenuMessage(uMsg, wParam, lParam, bHandled);
3052
3054
3055 if (GetSelections() == 0)
3056 {
3063 }
3064 else
3065 {
3066 // FIXME: Check copyable
3073 }
3074
3075 /* Lets try to find out what the hell wParam is */
3076 if (hmenu == GetSubMenu(m_hMenu, nPos))
3077 menuItemId = ReallyGetMenuItemID(m_hMenu, nPos);
3078 else if (hViewMenu && hmenu == GetSubMenu(hViewMenu, nPos))
3079 menuItemId = ReallyGetMenuItemID(hViewMenu, nPos);
3080 else if (m_hContextMenu && hmenu == GetSubMenu(m_hContextMenu, nPos))
3081 menuItemId = ReallyGetMenuItemID(m_hContextMenu, nPos);
3082 else
3083 return FALSE;
3084
3085 switch (menuItemId)
3086 {
3087 case FCIDM_MENU_FILE:
3088 FillFileMenu();
3089 break;
3090 case FCIDM_MENU_VIEW:
3091 case FCIDM_SHVIEW_VIEW:
3093 break;
3096 break;
3097 }
3098
3099 return FALSE;
3100}
3101
3103{
3104 bHandled = TRUE;
3105 return m_ClipboardChain.HandleChangeCBChain(wParam, lParam);
3106}
3107
3109{
3110 bHandled = TRUE;
3111 const LRESULT res = m_ClipboardChain.HandleDrawClipboard(wParam, lParam);
3112 if (m_HasCutItems)
3113 {
3114 m_ClipboardChain.Unhook(m_hWnd);
3115 m_HasCutItems = false;
3116 m_ListView.SetItemState(-1, 0, LVIS_CUT); // Somebody copied or pasted, nothing can be "cut" anymore
3117 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) | LVIS_CUT, 0);
3118 }
3119 return res;
3120}
3121
3123{
3124 for (UINT i = 0, c = m_ListView.GetItemCount(); i < c; ++i)
3125 m_ListView.SetItemState(i, GetItemAttributes(i, SFGAO_HIDDEN | SFGAO_GHOSTED) ? LVIS_CUT : 0, LVIS_CUT);
3126}
3127
3128// The INTERFACE of the IShellView object
3129
3131{
3132 TRACE("(%p)\n", this);
3133
3134 *phWnd = m_hWnd;
3135
3136 return S_OK;
3137}
3138
3140{
3141 FIXME("(%p) stub\n", this);
3142
3143 return E_NOTIMPL;
3144}
3145
3146// FIXME: use the accel functions
3148{
3149 if (m_isEditing)
3150 return S_FALSE;
3151
3152 if (lpmsg->message >= WM_KEYFIRST && lpmsg->message <= WM_KEYLAST)
3153 {
3154 if (::TranslateAcceleratorW(m_hWnd, m_hAccel, lpmsg) != 0)
3155 return S_OK;
3156
3157 TRACE("-- key=0x%04lx\n", lpmsg->wParam);
3158 }
3159
3160 return m_pShellBrowser ? m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0) : S_FALSE;
3161}
3162
3164{
3165 FIXME("(%p)\n", this);
3166 return E_NOTIMPL;
3167}
3168
3170{
3171 TRACE("(%p)->(state=%x)\n", this, uState);
3172
3173 // don't do anything if the state isn't changing
3174 if (m_uState == uState)
3175 return S_OK;
3176
3177 // OnActivate handles the menu merging and internal state
3178 DoActivate(uState);
3179
3180 // only do this if we are active
3181 if (uState != SVUIA_DEACTIVATE)
3182 {
3184
3185 // Set the text for the status bar
3187 }
3188
3189 return S_OK;
3190}
3191
3193{
3194 TRACE("(%p)\n", this);
3195
3197
3199 FillList();
3200
3201 return S_OK;
3202}
3203
3205{
3206 return CreateViewWindow3(psb, lpPrevView, SV3CVW3_DEFAULT,
3207 (FOLDERFLAGS)lpfs->fFlags, (FOLDERFLAGS)lpfs->fFlags, (FOLDERVIEWMODE)lpfs->ViewMode, NULL, prcView, phWnd);
3208}
3209
3211{
3212 TRACE("(%p)\n", this);
3213
3214 /* Make absolutely sure all our UI is cleaned up */
3216
3217 if (m_hAccel)
3218 {
3219 // MSDN: Accelerator tables loaded from resources are freed automatically when application terminates
3220 m_hAccel = NULL;
3221 }
3222
3224 {
3227 }
3228
3229 if (m_hMenuViewModes)
3230 {
3233 }
3234
3235 if (m_hMenu)
3236 {
3238 m_hMenu = NULL;
3239 }
3240
3241 if (m_hWnd)
3243
3244 if (m_ListView)
3245 m_ListView.DestroyWindow();
3246
3247 if (m_hWnd)
3248 DestroyWindow();
3249
3252
3253 return S_OK;
3254}
3255
3257{
3258 TRACE("(%p)->(%p) vmode=%x flags=%x\n", this, lpfs,
3260
3261 if (!lpfs)
3262 return E_INVALIDARG;
3263
3264 *lpfs = m_FolderSettings;
3265 return S_OK;
3266}
3267
3269{
3270 TRACE("(%p)->(0x%lX, %p, %p)\n", this, dwReserved, lpfn, lparam);
3271
3274 return S_OK;
3275}
3276
3278{
3279 ULONG read;
3280 HRESULT hr = pS->Read(buffer, cb, &read);
3281 return FAILED(hr) ? hr : (cb == read ? S_OK : HResultFromWin32(ERROR_MORE_DATA));
3282}
3283
3285{
3286 DWORD value;
3288 return SUCCEEDED(hr) ? value : def;
3289}
3290
3292{
3293 CLSID clsid;
3295 if (SUCCEEDED(hr))
3296 {
3297 WCHAR path[MAX_PATH], name[39];
3298 wsprintfW(path, L"%s\\%s", REGSTR_PATH_EXPLORER, L"Streams\\Default");
3300 *ppStream = SHOpenRegStream2W(HKEY_CURRENT_USER, path, name, Stgm);
3301 hr = *ppStream ? S_OK : E_FAIL;
3302 }
3303 return hr;
3304}
3305
3307{
3309 if (FAILED(hr))
3310 return hr;
3311 if (cols.Signature != PERSISTCOLUMNS::SIG || cols.Count > cols.MAXCOUNT)
3313 return Read(pS, &cols.Columns, sizeof(*cols.Columns) * cols.Count);
3314}
3315
3317{
3319 PERSISTCOLUMNS cols;
3322 bool fallback = false;
3323 HRESULT hrColumns = E_FAIL;
3325 if (SUCCEEDED(hr))
3326 {
3327 DWORD data;
3328 if (FAILED(hr = SHPropertyBag_ReadDWORD(pPB, L"Mode", &data)))
3329 goto loadfallback;
3331 cvs.FolderSettings.fFlags = ReadDWORD(pPB, L"FFlags", FWF_NOGROUPING);
3332 data = ReadDWORD(pPB, L"Sort", ~0ul);
3334 cvs.SortDir = (INT8)ReadDWORD(pPB, L"SortDir", 1);
3335 if (SUCCEEDED(hrColumns = SHPropertyBag_ReadStream(pPB, L"ColInfo", &pS)))
3336 hrColumns = LoadColumnsStream(cols, pS);
3337 }
3338 else
3339 {
3340 if (FAILED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_READ, &pS) : E_UNEXPECTED)))
3341 {
3342 loadfallback:
3344 fallback = true;
3345 }
3346 if (FAILED(hr) || FAILED(hr = Read(pS, &cvs, sizeof(cvs))))
3347 return hr;
3348 if (cvs.Signature != cvs.SIG)
3350 hrColumns = LoadColumnsStream(cols, pS);
3351 }
3353 m_FolderSettings.fFlags &= ~cvs.VALIDFWF;
3355 if (SUCCEEDED(hrColumns))
3356 {
3357 BOOL failed = FALSE;
3358 if ((m_LoadColumnsList = DPA_Create(cols.Count)) != NULL)
3359 {
3360 for (UINT i = 0; i < cols.Count; ++i)
3361 {
3362 failed |= !DPA_SetPtr(m_LoadColumnsList, i, UlongToPtr(cols.Columns[i]));
3363 }
3364 }
3365 if (failed || !cols.Count)
3366 {
3369 }
3370 }
3373 m_sortInfo.Direction = cvs.SortDir > 0 ? 1 : -1;
3375 return hr;
3376}
3377
3379{
3380 if (!m_ListView.m_hWnd)
3381 return E_UNEXPECTED;
3384 cvs.SortColId = sortcol >= 0 ? (WORD)sortcol : 0;
3386 PERSISTCOLUMNS cols;
3388 cols.Count = 0;
3389 LVCOLUMN lvc;
3390 lvc.mask = LVCF_WIDTH;
3391 for (UINT i = 0, j = 0; i < PERSISTCOLUMNS::MAXCOUNT && ListView_GetColumn(m_ListView, j, &lvc); ++j)
3392 {
3394 if (SUCCEEDED(hr))
3395 {
3396 cols.Columns[i] = MAKELONG(hr, lvc.cx);
3397 cols.Count = ++i;
3398 }
3399 }
3400 UINT cbColumns = FIELD_OFFSET(PERSISTCOLUMNS, Columns) + (sizeof(*cols.Columns) * cols.Count);
3402
3403 IPropertyBag *pPB;
3404 HRESULT hr = S_OK;
3405 if (pStream)
3406 {
3407 pStream->AddRef();
3408 goto stream;
3409 }
3411 if (SUCCEEDED(hr))
3412 {
3413 UINT uViewMode;
3414 GetCurrentViewMode(&uViewMode);
3415 hr = SHPropertyBag_WriteDWORD(pPB, L"Mode", uViewMode);
3417 SHPropertyBag_WriteDWORD(pPB, L"Sort", cvs.SortColId);
3418 SHPropertyBag_WriteDWORD(pPB, L"SortDir", cvs.SortDir);
3419 pStream = cols.Count ? SHCreateMemStream((LPBYTE)&cols, cbColumns) : NULL;
3420 if (!pStream || FAILED(SHPropertyBag_WriteStream(pPB, L"ColInfo", pStream)))
3421 SHPropertyBag_Delete(pPB, L"ColInfo");
3422#if 0 // TODO
3424 memcpy(name, L"ItemPos", sizeof(L"ItemPos"));
3425 if (SHGetPerScreenResName(name + 7, _countof(name) - 7, 0))
3426 {
3427 if (GetAutoArrange() == S_FALSE)
3428 // TODO: Save listview item positions
3429 else
3431 }
3432#endif
3433 pPB->Release();
3434 }
3435 else if (SUCCEEDED(hr = (m_pShellBrowser ? m_pShellBrowser->GetViewStateStream(STGM_WRITE, &pStream) : E_UNEXPECTED)))
3436 {
3437 stream:
3438 ULONG written;
3439 cvs.Signature = cvs.SIG;
3441 hr = pStream->Write(&cvs, sizeof(cvs), &written);
3442 if (SUCCEEDED(hr))
3443 hr = pStream->Write(&cols, cbColumns, &written);
3444 }
3445 // TODO: else if (SUCCEEDED(_DoFolderViewCB(SFVM_GETCOLUMNSTREAM)))
3446 if (pStream)
3447 pStream->Release();
3448 return hr;
3449}
3450
3452{
3454 return SaveViewState(NULL);
3455 return S_FALSE;
3456}
3457
3458#define UPDATEFOLDERVIEWFLAGS(bits, bit, set) ( (bits) = ((bits) & ~(bit)) | ((set) ? (bit) : 0) )
3460{
3464}
3465
3467{
3468 SHELLSTATE ss;
3470 return ((m_FolderSettings.fFlags & FWF_SINGLECLICKACTIVATE) || (!ss.fDoubleClickInWebView && !ss.fWin95Classic))
3472}
3473
3475{
3476 int i;
3477
3478 TRACE("(%p)->(pidl=%p, 0x%08x) stub\n", this, pidl, uFlags);
3479
3480 if (!m_ListView)
3481 {
3482 ERR("!m_ListView\n");
3483 return E_FAIL;
3484 }
3485
3486 i = LV_FindItemByPidl(pidl);
3487 if (i == -1)
3488 return S_OK;
3489
3490 LVITEMW lvItem = {0};
3491 lvItem.mask = LVIF_STATE;
3493
3494 while (m_ListView.GetItem(&lvItem))
3495 {
3496 if (lvItem.iItem == i)
3497 {
3498 if (uFlags & SVSI_SELECT)
3499 lvItem.state |= LVIS_SELECTED;
3500 else
3501 lvItem.state &= ~LVIS_SELECTED;
3502
3503 if (uFlags & SVSI_FOCUSED)
3504 lvItem.state |= LVIS_FOCUSED;
3505 else
3506 lvItem.state &= ~LVIS_FOCUSED;
3507 }
3508 else
3509 {
3510 if (uFlags & SVSI_DESELECTOTHERS)
3511 {
3512 lvItem.state &= ~LVIS_SELECTED;
3513 }
3514 lvItem.state &= ~LVIS_FOCUSED;
3515 }
3516
3517 m_ListView.SetItem(&lvItem);
3518 lvItem.iItem++;
3519 }
3520
3521 if (uFlags & SVSI_ENSUREVISIBLE)
3523
3524 if((uFlags & SVSI_EDIT) == SVSI_EDIT)
3526
3527 return S_OK;
3528}
3529
3531{
3533
3534 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n", this, uItem, debugstr_guid(&riid), ppvOut);
3535
3536 if (!ppvOut)
3537 return E_INVALIDARG;
3538
3539 *ppvOut = NULL;
3540
3541 switch (uItem)
3542 {
3543 case SVGIO_BACKGROUND:
3544 if (IsEqualIID(riid, IID_IContextMenu))
3545 {
3548 return hr;
3549
3550 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3551 }
3552 else if (IsEqualIID(riid, IID_IDispatch))
3553 {
3555 {
3558 return hr;
3559 }
3560 hr = m_pShellFolderViewDual->QueryInterface(riid, ppvOut);
3561 }
3562 break;
3563 case SVGIO_SELECTION:
3564 GetSelections();
3565 hr = m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, m_apidl, riid, 0, ppvOut);
3567 return hr;
3568
3569 if (IsEqualIID(riid, IID_IContextMenu))
3570 IUnknown_SetSite(*((IUnknown**)ppvOut), (IShellView *)this);
3571
3572 break;
3573 }
3574
3575 TRACE("-- (%p)->(interface=%p)\n", this, *ppvOut);
3576
3577 return hr;
3578}
3579
3581{
3585 mode = temp;
3586 return mode;
3587}
3588
3590{
3591 TRACE("(%p)->(%p), stub\n", this, pViewMode);
3592
3593 if (!pViewMode)
3594 return E_INVALIDARG;
3595
3596 *pViewMode = m_FolderSettings.ViewMode;
3597 return S_OK;
3598}
3599
3601{
3602 DWORD dwStyle;
3603 TRACE("(%p)->(%u), stub\n", this, ViewMode);
3604
3605 /* It's not redundant to check FVM_AUTO because it's a (UINT)-1 */
3606 if (((INT)ViewMode < FVM_FIRST || (INT)ViewMode > FVM_LAST) && ((INT)ViewMode != FVM_AUTO))
3607 return E_INVALIDARG;
3608
3609 /* Windows before Vista uses LVM_SETVIEW and possibly
3610 LVM_SETEXTENDEDLISTVIEWSTYLE to set the style of the listview,
3611 while later versions seem to accomplish this through other
3612 means. */
3613 switch (ViewMode)
3614 {
3615 case FVM_ICON: dwStyle = LVS_ICON; break;
3616 case FVM_SMALLICON: dwStyle = LVS_SMALLICON; break;
3617 case FVM_LIST: dwStyle = LVS_LIST; break;
3618 case FVM_DETAILS: dwStyle = LVS_REPORT; break;
3619 default:
3620 FIXME("ViewMode %d not implemented\n", ViewMode);
3621 dwStyle = LVS_LIST;
3622 break;
3623 }
3624
3625 m_ListView.ModifyStyle(LVS_TYPEMASK, dwStyle);
3626
3627 /* This will not necessarily be the actual mode set above.
3628 This mimics the behavior of Windows XP. */
3629 m_FolderSettings.ViewMode = ViewMode;
3630 CheckToolbar();
3631 return S_OK;
3632}
3633
3635{
3636 if (m_pSFParent == NULL)
3637 return E_FAIL;
3638
3639 return m_pSFParent->QueryInterface(riid, ppv);
3640}
3641
3643{
3644 PCUITEMID_CHILD pidl = _PidlByItem(iItemIndex);
3645 if (pidl)
3646 {
3647 *ppidl = ILClone(pidl);
3648 return S_OK;
3649 }
3650
3651 *ppidl = 0;
3652 return E_INVALIDARG;
3653}
3654
3656{
3657 TRACE("(%p)->(%u %p)\n", this, uFlags, pcItems);
3659 FIXME("some flags unsupported, %x\n", uFlags & ~(SVGIO_ALLVIEW | SVGIO_SELECTION));
3662 else
3664 return S_OK;
3665}
3666
3668{
3669 return E_NOTIMPL;
3670}
3671
3673{
3674 TRACE("(%p)->(%p)\n", this, piItem);
3675
3676 *piItem = m_ListView.GetSelectionMark();
3677
3678 return S_OK;
3679}
3680
3682{
3683 TRACE("(%p)->(%p)\n", this, piItem);
3684
3685 *piItem = m_ListView.GetNextItem(-1, LVNI_FOCUSED);
3686
3687 return S_OK;
3688}
3689
3691{
3692 if (!m_ListView)
3693 {
3694 ERR("!m_ListView\n");
3695 return E_FAIL;
3696 }
3697
3698 int lvIndex = LV_FindItemByPidl(pidl);
3699 if (lvIndex == -1 || ppt == NULL)
3700 return E_INVALIDARG;
3701
3702 m_ListView.GetItemPosition(lvIndex, ppt);
3703 return S_OK;
3704}
3705
3707{
3708 TRACE("(%p)->(%p)\n", this, ppt);
3709
3710 if (!m_ListView)
3711 {
3712 ERR("!m_ListView\n");
3713 return S_FALSE;
3714 }
3715
3716 if (ppt)
3717 {
3718 SIZE spacing;
3719 m_ListView.GetItemSpacing(spacing);
3720
3721 ppt->x = spacing.cx;
3722 ppt->y = spacing.cy;
3723 }
3724
3725 return S_OK;
3726}
3727
3729{
3730 return E_NOTIMPL;
3731}
3732
3734{
3735 return ((m_ListView.GetStyle() & LVS_AUTOARRANGE) ? S_OK : S_FALSE);
3736}
3737
3739{
3740 DWORD dwExStyle = (DWORD)m_ListView.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
3741 return ((dwExStyle & LVS_EX_SNAPTOGRID) ? S_OK : S_FALSE);
3742}
3743
3745{
3746 LVITEMW lvItem;
3747
3748 TRACE("(%p)->(%d, %x)\n", this, iItem, dwFlags);
3749
3750 lvItem.state = 0;
3751 lvItem.stateMask = LVIS_SELECTED;
3752
3753 if (dwFlags & SVSI_ENSUREVISIBLE)
3754 m_ListView.EnsureVisible(iItem, 0);
3755
3756 /* all items */
3757 if (dwFlags & SVSI_DESELECTOTHERS)
3759
3760 /* this item */
3761 if (dwFlags & SVSI_SELECT)
3762 lvItem.state |= LVIS_SELECTED;
3763
3764 if (dwFlags & SVSI_FOCUSED)
3765 lvItem.stateMask |= LVIS_FOCUSED;
3766
3767 m_ListView.SetItemState(iItem, lvItem.state, lvItem.stateMask);
3768
3769 if ((dwFlags & SVSI_EDIT) == SVSI_EDIT)
3770 m_ListView.EditLabel(iItem);
3771
3772 return S_OK;
3773}
3774
3776{
3778 m_ListView.SetItemState(-1, 0, LVIS_SELECTED); // Reset the selection
3779 for (UINT i = 0 ; i < cidl; i++)
3780 {
3781 int lvIndex = LV_FindItemByPidl(apidl[i]);
3782 if (lvIndex != -1)
3783 SelectAndPositionItem(lvIndex, dwFlags, apt ? &apt[i] : NULL);
3784 }
3785 return S_OK;
3786}
3787
3788
3789// IShellView2 implementation
3790
3792{
3793 if (view_type == SV2GV_DEFAULTVIEW)
3794 {
3795 *pVid = VID_Default;
3796 return S_OK;
3797 }
3798 if (view_type == SV2GV_CURRENTVIEW)
3800 if ((int)view_type < 0)
3801 return E_UNEXPECTED;
3802
3805 return E_INVALIDARG;
3807 return S_OK;
3808}
3809
3811{
3812 return CreateViewWindow3(view_params->psbOwner, view_params->psvPrev,
3813 SV3CVW3_DEFAULT, (FOLDERFLAGS)view_params->pfs->fFlags, (FOLDERFLAGS)view_params->pfs->fFlags,
3814 (FOLDERVIEWMODE)view_params->pfs->ViewMode, view_params->pvid, view_params->prcView, &view_params->hwndView);
3815}
3816
3818{
3819 OLEMENUGROUPWIDTHS omw = { { 0, 0, 0, 0, 0, 0 } };
3820 const UINT SUPPORTED_SV3CVW3 = SV3CVW3_FORCEVIEWMODE | SV3CVW3_FORCEFOLDERFLAGS;
3821 const UINT IGNORE_FWF = FWF_OWNERDATA; // FIXME: Support this
3822
3823 *hwnd = NULL;
3824
3825 TRACE("(%p)->(shlview=%p shlbrs=%p rec=%p hwnd=%p vmode=%x flags=%x)\n", this, psvPrevious, psb, prcView, hwnd, mode, flags);
3826 if (prcView != NULL)
3827 TRACE("-- left=%i top=%i right=%i bottom=%i\n", prcView->left, prcView->top, prcView->right, prcView->bottom);
3828
3829 /* Validate the Shell Browser */
3830 if (psb == NULL || m_hWnd)
3831 return E_UNEXPECTED;
3832
3833 if (view_flags & ~SUPPORTED_SV3CVW3)
3834 FIXME("unsupported view flags 0x%08x\n", view_flags & ~SUPPORTED_SV3CVW3);
3835
3836 /* Set up the member variables */
3837 m_pShellBrowser = psb;
3839 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3840
3841 if (view_id)
3842 {
3845 mode = temp;
3846 else if (*view_id == VID_Default)
3847 mode = FVM_AUTO;
3848 else
3849 FIXME("Ignoring unrecognized VID %s\n", debugstr_guid(view_id));
3850 }
3851 if (mode == FVM_AUTO)
3853
3855 {
3857 ? "unsupported" : "invalid", m_FolderSettings.ViewMode);
3859 }
3860 const UINT requestedViewMode = m_FolderSettings.ViewMode;
3861
3862 /* Get our parent window */
3863 m_pShellBrowser->GetWindow(&m_hWndParent);
3865
3866 /* Try to get the ICommDlgBrowserInterface, adds a reference !!! */
3869 {
3870 TRACE("-- CommDlgBrowser\n");
3871 }
3872
3873 LoadViewState();
3874 if (view_flags & SV3CVW3_FORCEVIEWMODE)
3875 m_FolderSettings.ViewMode = requestedViewMode;
3876 if (view_flags & SV3CVW3_FORCEFOLDERFLAGS)
3877 m_FolderSettings.fFlags = (mask & flags) & ~IGNORE_FWF;
3878
3879 RECT rcView = *prcView;
3881 if (m_hWnd == NULL)
3882 return E_FAIL;
3883
3884 *hwnd = m_hWnd;
3885
3886 CheckToolbar();
3887
3888 if (!*hwnd)
3889 return E_FAIL;
3890
3892
3894 UpdateWindow();
3895
3896 if (!m_hMenu)
3897 {
3898 m_hMenu = CreateMenu();
3899 m_pShellBrowser->InsertMenusSB(m_hMenu, &omw);
3900 TRACE("-- after fnInsertMenusSB\n");
3901 }
3902
3903 _MergeToolbar();
3904
3905 return S_OK;
3906}
3907
3909{
3910 if (!pidl)
3911 {
3913 if (idx < 0)
3915 pidl = _PidlByItem(idx);
3916 }
3917 if (ILFindLastID(pidl) != pidl)
3918 return E_INVALIDARG;
3919 return SelectItem(pidl, SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT);
3920}
3921
3923{
3924 if (Idx == -1)
3925 return fSVSI == SVSI_DESELECTOTHERS ? SelectItem(-2, fSVSI) : E_INVALIDARG;
3926 if (ppt)
3927 m_ListView.SetItemPosition(Idx, ppt);
3928 return SelectItem(Idx, fSVSI); // After SetItemPosition for SVSI_ENSUREVISIBLE
3929}
3930
3932{
3933 if (!item)
3934 return SelectAndPositionItem(-1, flags, point);
3935 int idx = LV_FindItemByPidl(item);
3936 return idx != -1 ? SelectAndPositionItem(idx, flags, point) : S_FALSE;
3937}
3938
3939// IShellFolderView implementation
3940
3942{
3943 _Sort(LOWORD(sort & SHCIDS_COLUMNMASK));
3944 return S_OK;
3945}
3946
3948{
3949 int col = m_sortInfo.ListColumn;
3950 *sort = col != LISTVIEW_SORT_INFO::UNSPECIFIEDCOLUMN ? col : 0;
3952}
3953
3955{
3957 return S_OK;
3958}
3959
3961{
3962 m_ListView.ModifyStyle(0, LVS_AUTOARRANGE);
3964 return S_OK;
3965}
3966
3968{
3969 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3970 if (!m_ListView)
3971 {
3972 ERR("!m_ListView\n");
3973 return E_FAIL;
3974 }
3975 *item = LV_AddItem(pidl);
3976 return (int)*item >= 0 ? S_OK : E_OUTOFMEMORY;
3977}
3978
3980{
3981 TRACE("(%p)->(%p %d)\n", this, pidl, item);
3982 return Item(item, pidl);
3983}
3984
3986{
3987 TRACE("(%p)->(%p %p)\n", this, pidl, item);
3988
3989 if (!m_ListView)
3990 {
3991 ERR("!m_ListView\n");
3992 return E_FAIL;
3993 }
3994
3995 if (pidl)
3996 {
3999 }
4000 else
4001 {
4002 *item = 0;
4004 }
4005
4006 return S_OK;
4007}
4008
4010{
4011 TRACE("(%p)->(%p)\n", this, count);
4013 return S_OK;
4014}
4015
4017{
4018 FIXME("(%p)->(%d %x) stub\n", this, count, flags);
4019 return E_NOTIMPL;
4020}
4021
4023{
4024 FIXME("(%p)->(%p %p %p) stub\n", this, pidl_old, pidl_new, item);
4025 return E_NOTIMPL;
4026}
4027
4029{
4030 FIXME("(%p)->(%p %p) stub\n", this, pidl, item);
4031 return E_NOTIMPL;
4032}
4033
4035{
4036 TRACE("(%p)->(%d)\n", this, redraw);
4037 if (m_ListView)
4039 return S_OK;
4040}
4041
4043{
4045 return S_OK;
4046}
4047
4049{
4050 TRACE("(%p)->(%p %p)\n", this, pidl, items);
4051
4052 *items = GetSelections();
4053
4054 if (*items)
4055 {
4056 *pidl = static_cast<PCUITEMID_CHILD *>(LocalAlloc(0, *items * sizeof(PCUITEMID_CHILD)));
4057 if (!*pidl)
4058 {
4059 return E_OUTOFMEMORY;
4060 }
4061
4062 // It's documented that caller shouldn't free the PIDLs, only the array itself
4063 memcpy(*pidl, m_apidl, *items * sizeof(PCUITEMID_CHILD));
4064 }
4065
4066 return S_OK;
4067}
4068
4070{
4071 if ((m_iDragOverItem == -1 || m_pCurDropTarget == NULL) &&
4073 {
4074 return S_OK;
4075 }
4076
4077 return S_FALSE;
4078}
4079
4081{
4082 if (!pt)
4083 return E_INVALIDARG;
4084
4086 return S_OK;
4087}
4088
4090{
4091 FIXME("(%p)->(%p) stub\n", this, pt);
4092 return E_NOTIMPL;
4093}
4094
4096{
4097 TRACE("(%p)->(%p)\n", this, obj);
4098 return E_NOTIMPL;
4099}
4100
4102{
4103 FIXME("(%p)->(%p %p) stub\n", this, pidl, pt);
4104 return E_NOTIMPL;
4105}
4106
4108{
4109 FIXME("(%p)->(%p) stub\n", this, drop_target);
4110 return E_NOTIMPL;
4111}
4112
4114{
4115 if (!move)
4116 return S_OK;
4117
4118 UINT CutCount = 0;
4119 for (int i = -1; (i = m_ListView.GetNextItem(i, LVNI_SELECTED)) != -1;)
4120 {
4121 if (!CutCount++)
4122 {
4123 // Turn off the LVIS_CUT LVM_SETCALLBACKMASK optimization
4124 m_ListView.SendMessageW(LVM_SETCALLBACKMASK, m_ListView.SendMessageW(LVM_GETCALLBACKMASK, 0, 0) & ~LVIS_CUT, 0);
4126 }
4128 }
4129 if (CutCount)
4130 {
4132 m_HasCutItems = true;
4133 }
4134 return S_OK;
4135}
4136
4138{
4139 FIXME("(%p)->(%p) stub\n", this, obj);
4140 return E_NOTIMPL;
4141}
4142
4144{
4145 FIXME("(%p)->(%p) stub\n", this, spacing);
4146 return E_NOTIMPL;
4147}
4148
4149HRESULT STDMETHODCALLTYPE CDefView::SetCallback(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb)
4150{
4151 if (old_cb)
4152 *old_cb = m_pShellFolderViewCB.Detach();
4153
4154 m_pShellFolderViewCB = new_cb;
4156 if (new_cb)
4157 new_cb->QueryInterface(IID_PPV_ARG(IFolderFilter, &m_pFolderFilter));
4158 return S_OK;
4159}
4160
4162{
4163 FIXME("(%p)->(%d) stub\n", this, flags);
4164 return E_NOTIMPL;
4165}
4166
4168{
4169 TRACE("(%p)->(%p)\n", this, support);
4170 return S_OK;
4171}
4172
4174{
4175 FIXME("(%p)->(%p) stub\n", this, disp);
4176 return E_NOTIMPL;
4177}
4178
4179HRESULT WINAPI CDefView::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
4180{
4181 FIXME("(%p)->(%p(%s) 0x%08x %p %p\n",
4182 this, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
4183
4184 if (!prgCmds)
4185 return E_INVALIDARG;
4186
4187 for (UINT i = 0; i < cCmds; i++)
4188 {
4189 FIXME("\tprgCmds[%d].cmdID = %d\n", i, prgCmds[i].cmdID);
4190 prgCmds[i].cmdf = 0;
4191 }
4192
4193 return OLECMDERR_E_UNKNOWNGROUP;
4194}
4195
4197// ISVOleCmdTarget_Exec(IOleCommandTarget)
4198//
4199// nCmdID is the OLECMDID_* enumeration
4200HRESULT WINAPI CDefView::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
4201{
4202 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08x Opt:0x%08x %p %p)\n",
4203 this, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
4204
4205 if (!pguidCmdGroup)
4206 return OLECMDERR_E_UNKNOWNGROUP;
4207
4208 if (IsEqualCLSID(*pguidCmdGroup, m_Category))
4209 {
4210 if (nCmdID == FCIDM_SHVIEW_AUTOARRANGE)
4211 {
4212 if (V_VT(pvaIn) != VT_INT_PTR)
4213 return OLECMDERR_E_NOTSUPPORTED;
4214
4216 params.cbSize = sizeof(params);
4217 params.rcExclude = *(RECT*) V_INTREF(pvaIn);
4218
4219 if (m_hMenuViewModes)
4220 {
4221 // Duplicate all but the last two items of the view modes menu
4222 HMENU hmenuViewPopup = CreatePopupMenu();
4223 Shell_MergeMenus(hmenuViewPopup, m_hMenuViewModes, 0, 0, 0xFFFF, 0);
4224 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4225 DeleteMenu(hmenuViewPopup, GetMenuItemCount(hmenuViewPopup) - 1, MF_BYPOSITION);
4226 CheckViewMode(hmenuViewPopup);
4227 TrackPopupMenuEx(hmenuViewPopup, TPM_LEFTALIGN | TPM_TOPALIGN, params.rcExclude.left, params.rcExclude.bottom, m_hWndParent, &params);
4228 ::DestroyMenu(hmenuViewPopup);
4229 }
4230
4231 // pvaOut is VT_I4 with value 0x403 (cmd id of the new mode maybe?)
4232 V_VT(pvaOut) = VT_I4;
4233 V_I4(pvaOut) = 0x403;
4234 }
4235 }
4236
4237 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer) &&
4238 (nCmdID == 0x29) &&
4239 (nCmdexecopt == 4) && pvaOut)
4240 return S_OK;
4241
4242 if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView) &&
4243 (nCmdID == 9) &&
4244 (nCmdexecopt == 0))
4245 return 1;
4246
4247 if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
4248 {
4249 CComPtr<IStream> pStream;
4250 WCHAR SubKey[MAX_PATH];
4251 switch (nCmdID)
4252 {
4254 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4256 SaveViewState(pStream);
4257 return S_OK;
4259 PathCombineW(SubKey, REGSTR_PATH_EXPLORER, L"Streams\\Default");
4261 SHDeleteKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\ShellNoRoam\\Bags");
4262 m_FolderSettings.fFlags |= FWF_NOBROWSERVIEWSTATE; // Don't let this folder save itself
4263 return S_OK;
4264 }
4265 }
4266
4267 return OLECMDERR_E_UNKNOWNGROUP;
4268}
4269
4270/**********************************************************
4271 * ISVDropTarget implementation
4272 */
4273
4274/******************************************************************************
4275 * drag_notify_subitem [Internal]
4276 *
4277 * Figure out the shellfolder object, which is currently under the mouse cursor
4278 * and notify it via the IDropTarget interface.
4279 */
4280
4281#define SCROLLAREAWIDTH 20
4282
4284{
4285 LONG lResult;
4286 HRESULT hr;
4287 RECT clientRect;
4288
4289 /* The key state on drop doesn't have MK_LBUTTON or MK_RBUTTON because it
4290 reflects the key state after the user released the button, so we need
4291 to remember the last key state when the button was pressed */
4292 m_grfKeyState = grfKeyState;
4293
4294 // Map from global to client coordinates and query the index of the
4295 // listview-item, which is currently under the mouse cursor.
4296 LVHITTESTINFO htinfo = {{pt.x, pt.y}, LVHT_ONITEM};
4297 ScreenToClient(&htinfo.pt);
4298 lResult = m_ListView.HitTest(&htinfo);
4299
4300 /* Send WM_*SCROLL messages every 250 ms during drag-scrolling */
4301 ::GetClientRect(m_ListView, &clientRect);
4302 if (htinfo.pt.x == m_ptLastMousePos.x && htinfo.pt.y == m_ptLastMousePos.y &&
4303 (htinfo.pt.x < SCROLLAREAWIDTH || htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH ||
4304 htinfo.pt.y < SCROLLAREAWIDTH || htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH))
4305 {
4306 m_cScrollDelay = (m_cScrollDelay + 1) % 5; // DragOver is called every 50 ms
4307 if (m_cScrollDelay == 0)
4308 {
4309 /* Mouse did hover another 250 ms over the scroll-area */
4310 if (htinfo.pt.x < SCROLLAREAWIDTH)
4311 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEUP, 0);
4312
4313 if (htinfo.pt.x > clientRect.right - SCROLLAREAWIDTH)
4314 m_ListView.SendMessageW(WM_HSCROLL, SB_LINEDOWN, 0);
4315
4316 if (htinfo.pt.y < SCROLLAREAWIDTH)
4317 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEUP, 0);
4318
4319 if (htinfo.pt.y > clientRect.bottom - SCROLLAREAWIDTH)
4320 m_ListView.SendMessageW(WM_VSCROLL, SB_LINEDOWN, 0);
4321 }
4322 }
4323 else
4324 {
4325 m_cScrollDelay = 0; // Reset, if cursor is not over the listview's scroll-area
4326 }
4327
4328 m_ptLastMousePos = htinfo.pt;
4330
4331 /* We need to check if we drag the selection over itself */
4332 if (lResult != -1 && m_pSourceDataObject.p != NULL)
4333 {
4334 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4335
4336 for (UINT i = 0; i < m_cidl; i++)
4337 {
4338 if (pidl == m_apidl[i])
4339 {
4340 /* The item that is being draged is hovering itself. */
4341 lResult = -1;
4342 break;
4343 }
4344 }
4345 }
4346
4347 // If we are still over the previous sub-item, notify it via DragOver and return
4348 if (m_pCurDropTarget && lResult == m_iDragOverItem)
4349 return m_pCurDropTarget->DragOver(grfKeyState, pt, pdwEffect);
4350
4351 // We've left the previous sub-item, notify it via DragLeave and release it
4352 if (m_pCurDropTarget)
4353 {
4355 if (pidl)
4356 SelectItem(pidl, 0);
4357
4358 m_pCurDropTarget->DragLeave();
4360 }
4361
4362 m_iDragOverItem = lResult;
4363
4364 if (lResult == -1)
4365 {
4366 // We are not above one of the listview's subitems. Bind to the
4367 // parent folder's DropTarget interface.
4369 }
4370 else
4371 {
4372 // Query the relative PIDL of the shellfolder object represented
4373 // by the currently dragged over listview-item ...
4374 PCUITEMID_CHILD pidl = _PidlByItem(lResult);
4375
4376 // ... and bind m_pCurDropTarget to the IDropTarget interface of an UIObject of this object
4377 hr = m_pSFParent->GetUIObjectOf(m_ListView, 1, &pidl, IID_NULL_PPV_ARG(IDropTarget, &m_pCurDropTarget));
4378 }
4379
4381
4382 // If anything failed, m_pCurDropTarget should be NULL now, which ought to be a save state
4383 if (FAILED(hr))
4384 {
4385 *pdwEffect = DROPEFFECT_NONE;
4386 return hr;
4387 }
4388
4389 if (m_iDragOverItem != -1)
4390 {
4391 SelectItem(m_iDragOverItem, SVSI_SELECT);
4392 }
4393
4394 // Notify the item just entered via DragEnter
4395 return m_pCurDropTarget->DragEnter(m_pCurDataObject, grfKeyState, pt, pdwEffect);
4396}
4397
4398HRESULT WINAPI CDefView::DragEnter(IDataObject *pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
4399{
4400 if (*pdwEffect == DROPEFFECT_NONE)
4401 return S_OK;
4402
4403 /* Get a hold on the data object for later calls to DragEnter on the sub-folders */
4404 m_pCurDataObject = pDataObject;
4405
4406 HRESULT hr = drag_notify_subitem(grfKeyState, pt, pdwEffect);
4407 if (SUCCEEDED(hr))
4408 {
4409 POINT ptClient = {pt.x, pt.y};
4410 ScreenToClient(&ptClient);
4411 ImageList_DragEnter(m_hWnd, ptClient.x, ptClient.y);
4412 }
4413
4414 return hr;
4415}
4416
4418{
4419 POINT ptClient = {pt.x, pt.y};
4420 ScreenToClient(&ptClient);
4421 ImageList_DragMove(ptClient.x, ptClient.y);
4422 return drag_notify_subitem(grfKeyState, pt, pdwEffect);
4423}
4424
4426{
4428
4429 if (m_pCurDropTarget)
4430 {
4431 m_pCurDropTarget->DragLeave();
4433 }
4434
4435 if (m_pCurDataObject != NULL)
4436 {
4438 }
4439
4440 m_iDragOverItem = 0;
4441
4442 return S_OK;
4443}
4444
4446{
4447 RECT rcBound;
4448 INT i, nCount = m_ListView.GetItemCount();
4449 DWORD dwSpacing;
4450 INT dx, dy;
4451 BOOL bSmall = ((m_ListView.GetStyle() & LVS_TYPEMASK) != LVS_ICON);
4452
4453 // FIXME: LVM_GETORIGIN is broken. See CORE-17266
4454 pt.x += m_ListView.GetScrollPos(SB_HORZ);
4455 pt.y += m_ListView.GetScrollPos(SB_VERT);
4456
4457 if (m_ListView.GetStyle() & LVS_ALIGNLEFT)
4458 {
4459 // vertically
4460 for (i = 0; i < nCount; ++i)
4461 {
4462 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4463 dx = LOWORD(dwSpacing);
4464 dy = HIWORD(dwSpacing);
4466 rcBound.right = rcBound.left + dx;
4467 rcBound.bottom = rcBound.top + dy;
4468 if (pt.x < rcBound.right && pt.y < (rcBound.top + rcBound.bottom) / 2)
4469 {
4470 return i;
4471 }
4472 }
4473 for (i = nCount - 1; i >= 0; --i)
4474 {
4476 if (rcBound.left < pt.x && rcBound.top < pt.y)
4477 {
4478 return i + 1;
4479 }
4480 }
4481 }
4482 else
4483 {
4484 // horizontally
4485 for (i = 0; i < nCount; ++i)
4486 {
4487 dwSpacing = ListView_GetItemSpacing(m_ListView, bSmall);
4488 dx = LOWORD(dwSpacing);
4489 dy = HIWORD(dwSpacing);
4491 rcBound.right = rcBound.left + dx;
4492 rcBound.bottom = rcBound.top + dy;
4493 if (pt.y < rcBound.bottom && pt.x < rcBound.left)
4494 {
4495 return i;
4496 }
4497 if (pt.y < rcBound.bottom && pt.x < rcBound.right)
4498 {
4499 return i + 1;
4500 }
4501 }
4502 for (i = nCount - 1; i >= 0; --i)
4503 {
4505 if (rcBound.left < pt.x && rcBound.top < pt.y)
4506 {
4507 return i + 1;
4508 }
4509 }
4510 }
4511
4512 return nCount;
4513}
4514
4516{
4517 LRESULT lResult;
4518
4519 if (!m_isFullStatusBar)
4520 {
4521 int nPartArray[] = {-1};
4522 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4523 return;
4524 }
4525
4526 int nFileSizePartLength = 125;
4527 const int nLocationPartLength = 150;
4528 const int nRightPartsLength = nFileSizePartLength + nLocationPartLength;
4529 int nObjectsPartLength = nWidth - nRightPartsLength;
4530
4531 // If the window is small enough just divide each part into thirds
4532 // to match the behavior of Windows Server 2003
4533 if (nObjectsPartLength <= nLocationPartLength)
4534 nObjectsPartLength = nFileSizePartLength = nWidth / 3;
4535
4536 int nPartArray[] = {nObjectsPartLength, nObjectsPartLength + nFileSizePartLength, -1};
4537
4538 m_pShellBrowser->SendControlMsg(FCW_STATUS, SB_SETPARTS, _countof(nPartArray), (LPARAM)nPartArray, &lResult);
4539}
4540
4542{
4543 // Get the handle for the status bar
4544 HWND fStatusBar;
4545 m_pShellBrowser->GetControlWindow(FCW_STATUS, &fStatusBar);
4546
4547 // Get the size of our status bar
4548 RECT statusBarSize;
4549 ::GetWindowRect(fStatusBar, &statusBarSize);
4550
4551 // Resize the status bar
4552 _HandleStatusBarResize(statusBarSize.right - statusBarSize.left);
4553}
4554
4556
4557static INT CALLBACK
4558SelectionMoveCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
4559{
4560 CLParamIndexMap *pmap = (CLParamIndexMap *)lParamSort;
4561 INT i1 = pmap->Lookup(lParam1), i2 = pmap->Lookup(lParam2);
4562 if (i1 < i2)
4563 return -1;
4564 if (i1 > i2)
4565 return 1;
4566 return 0;
4567}
4568
4570{
4571 // get insertable index from position
4573
4574 // create identity mapping of indexes
4576 INT nCount = m_ListView.GetItemCount();
4577 for (INT i = 0; i < nCount; ++i)
4578 {
4579 array.Add(i);
4580 }
4581
4582 // re-ordering mapping
4583 INT iItem = -1;
4584 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4585 {
4586 INT iFrom = iItem, iTo = iPosition;
4587 if (iFrom < iTo)
4588 --iTo;
4589 if (iFrom >= nCount)
4590 iFrom = nCount - 1;
4591 if (iTo >= nCount)
4592 iTo = nCount - 1;
4593
4594 // shift indexes by swapping (like a bucket relay)
4595 if (iFrom < iTo)
4596 {
4597 for (INT i = iFrom; i < iTo; ++i)
4598 {
4599 // swap array[i] and array[i + 1]
4600 INT tmp = array[i];
4601 array[i] = array[i + 1];
4602 array[i + 1] = tmp;
4603 }
4604 }
4605 else
4606 {
4607 for (INT i = iFrom; i > iTo; --i)
4608 {
4609 // swap array[i] and array[i - 1]
4610 INT tmp = array[i];
4611 array[i] = array[i - 1];
4612 array[i - 1] = tmp;
4613 }
4614 }
4615 }
4616
4617 // create mapping (ListView's lParam to index) from array
4619 for (INT i = 0; i < nCount; ++i)
4620 {
4622 map.Add(lParam, i);
4623 }
4624
4625 // finally sort
4627}
4628
4629HRESULT WINAPI CDefView::Drop(IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
4630{
4633
4634 if ((IsDropOnSource(NULL) == S_OK) &&
4635 (*pdwEffect & DROPEFFECT_MOVE) &&
4637 {
4638 if (m_pCurDropTarget)
4639 {
4640 m_pCurDropTarget->DragLeave();
4642 }
4643
4644 POINT ptDrop = { pt.x, pt.y };
4645 ::ScreenToClient(m_ListView, &ptDrop);
4647 m_ptLastMousePos = ptDrop;
4648
4650 if (m_ListView.GetStyle() & LVS_AUTOARRANGE)
4651 {
4653 }
4654 else
4655 {
4656 POINT ptItem;
4657 INT iItem = -1;
4658 while ((iItem = m_ListView.GetNextItem(iItem, LVNI_SELECTED)) >= 0)
4659 {
4660 if (m_ListView.GetItemPosition(iItem, &ptItem))
4661 {
4664 m_ListView.SetItemPosition(iItem, &ptItem);
4665 }
4666 }
4667 }
4669 }
4670 else if (m_pCurDropTarget)
4671 {
4672 m_pCurDropTarget->Drop(pDataObject, grfKeyState, pt, pdwEffect);
4674 }
4675
4677 m_iDragOverItem = 0;
4678 return S_OK;
4679}
4680
4682{
4683 TRACE("(%p)\n", this);
4684
4685 if (fEscapePressed)
4686 return DRAGDROP_S_CANCEL;
4687 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON))
4688 return DRAGDROP_S_DROP;
4689 else
4690 return S_OK;
4691}
4692
4694{
4695 TRACE("(%p)\n", this);
4696
4698}
4699
4700HRESULT 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)
4701{
4702 FIXME("Stub: this=%p\n", this);
4703 return E_NOTIMPL;
4704}
4705
4706HRESULT WINAPI CDefView::GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDevice, LOGPALETTE **ppColorSet)
4707{
4708 FIXME("Stub: this=%p\n", this);
4709 return E_NOTIMPL;
4710}
4711
4712HRESULT WINAPI CDefView::Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze)
4713{
4714 FIXME("Stub: this=%p\n", this);
4715 return E_NOTIMPL;
4716}
4717
4719{
4720 FIXME("Stub: this=%p\n", this);
4721 return E_NOTIMPL;
4722}
4723
4725{
4726 FIXME("partial stub: %p 0x%08x 0x%08x %p\n", this, aspects, advf, pAdvSink);
4727
4728 // FIXME: we set the AdviseSink, but never use it to send any advice
4729 m_pAdvSink = pAdvSink;
4730 m_dwAspects = aspects;
4731 m_dwAdvf = advf;
4732
4733 return S_OK;
4734}
4735
4737{
4738 TRACE("this=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n", this, pAspects, pAdvf, ppAdvSink);
4739
4740 if (ppAdvSink)
4741 {
4742 *ppAdvSink = m_pAdvSink;
4743 m_pAdvSink.p->AddRef();
4744 }
4745
4746 if (pAspects)
4747 *pAspects = m_dwAspects;
4748
4749 if (pAdvf)
4750 *pAdvf = m_dwAdvf;
4751
4752 return S_OK;
4753}
4754
4756{
4757 if (IsEqualIID(guidService, SID_SFolderView))
4758 return QueryInterface(riid, ppvObject);
4759 return m_pShellBrowser ? IUnknown_QueryService(m_pShellBrowser, guidService, riid, ppvObject) : E_NOINTERFACE;
4760}
4761
4763{
4765 HRESULT hr = S_OK;
4766
4767 hr = IUnknown_QueryService(m_pShellBrowser, IID_IExplorerToolbar, IID_PPV_ARG(IExplorerToolbar, &ptb));
4768 if (FAILED(hr))
4769 return hr;
4770
4771 m_Category = CGID_DefViewFrame;
4772
4773 hr = ptb->SetCommandTarget(static_cast<IOleCommandTarget*>(this), &m_Category, 0);
4774 if (FAILED(hr))
4775 return hr;
4776
4777 if (hr == S_FALSE)
4778 return S_OK;
4779
4780#if 0
4781 hr = ptb->AddButtons(&m_Category, buttonsCount, buttons);
4782 if (FAILED(hr))
4783 return hr;
4784#endif
4785
4786 return S_OK;
4787}
4788
4790{
4792
4794 {
4795 hr = m_pShellFolderViewCB->MessageSFVCB(uMsg, wParam, lParam);
4796 }
4797
4798 return hr;
4799}
4800
4802{
4803 return ShellObjectCreatorInit<CDefView>(pFolder, riid, ppvOut);
4804}
4805
4807{
4809 HRESULT hRes;
4810
4811 if (!ppsv)
4812 return E_INVALIDARG;
4813
4814 *ppsv = NULL;
4815
4816 if (!pcsfv || pcsfv->cbSize != sizeof(*pcsfv))
4817 return E_INVALIDARG;
4818
4819 TRACE("sf=%p outer=%p callback=%p\n",
4820 pcsfv->pshf, pcsfv->psvOuter, pcsfv->psfvcb);
4821
4822 hRes = CDefView_CreateInstance(pcsfv->pshf, IID_PPV_ARG(IShellView, &psv));
4823 if (FAILED(hRes))
4824 return hRes;
4825
4826 if (pcsfv->psfvcb)
4827 {
4829 if (SUCCEEDED(psv->QueryInterface(IID_PPV_ARG(IShellFolderView, &sfv))))
4830 {
4831 sfv->SetCallback(pcsfv->psfvcb, NULL);
4832 }
4833 }
4834
4835 *ppsv = psv.Detach();
4836 return hRes;
4837}
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)
@ 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
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:4555
#define SCROLLAREAWIDTH
Definition: CDefView.cpp:4281
static BOOL ILIsParentOrSpecialParent(PCIDLIST_ABSOLUTE pidl1, PCIDLIST_ABSOLUTE pidl2)
Definition: CDefView.cpp:2896
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:3458
HRESULT CDefView_CreateInstance(IShellFolder *pFolder, REFIID riid, LPVOID *ppvOut)
Definition: CDefView.cpp:4801
#define ID_LISTVIEW
Definition: CDefView.cpp:592
static HRESULT LoadColumnsStream(PERSISTCOLUMNS &cols, IStream *pS)
Definition: CDefView.cpp:3306
#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:4558
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4806
static DWORD ReadDWORD(IPropertyBag *pPB, LPCWSTR name, DWORD def)
Definition: CDefView.cpp:3284
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:1691
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:2625
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
#define shell32_hInstance
@ lparam
Definition: SystemMenu.c:31
unsigned char BOOLEAN
Definition: actypes.h:127
unsigned char UINT8
Definition: actypes.h:128
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
#define read
Definition: acwin.h:97
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
signed char INT8
Definition: basetsd.h:183
#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
static HRESULT DoCopyMoveToFolder(BOOL Copy, HWND hWnd, IUnknown *pSite, IShellFolder *pSF, UINT cidl, PCUITEMID_CHILD_ARRAY pidls)
STDMETHOD() Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CDefView.cpp:4629
STDMETHOD() Unfreeze(DWORD dwFreeze) override
Definition: CDefView.cpp:4718
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:1641
CComPtr< IShellFolder > m_pSFParent
Definition: CDefView.cpp:235
LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2521
STDMETHOD() GetAutoArrange() override
Definition: CDefView.cpp:3733
void RefreshGhostedState()
Definition: CDefView.cpp:3122
LRESULT OnChangeCBChain(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3102
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2501
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:1522
CComPtr< IShellDetails > m_pSDParent
Definition: CDefView.cpp:237
STDMETHOD() DestroyViewWindow() override
Definition: CDefView.cpp:3210
LRESULT OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1739
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2251
int LV_AddItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1376
STDMETHOD() SetItemPos(PCUITEMID_CHILD pidl, POINT *pt) override
Definition: CDefView.cpp:4101
UINT GetItemActivateFlags()
Definition: CDefView.cpp:3466
BOOL IsSpecialFolder(int &csidl) const
Definition: CDefView.cpp:300
bool m_ScheduledStatusbarUpdate
Definition: CDefView.cpp:280
HRESULT FillFileMenu()
Definition: CDefView.cpp:1851
STDMETHOD() RemoveObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:3985
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:1897
bool m_isFullStatusBar
Definition: CDefView.cpp:279
STDMETHOD() SetAutomationObject(IDispatch *disp) override
Definition: CDefView.cpp:4173
LRESULT OnMenuMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3010
CComPtr< IShellFolderViewDual > m_pShellFolderViewDual
Definition: CDefView.cpp:242
STDMETHOD() DragLeave() override
Definition: CDefView.cpp:4425
LRESULT OnNCCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1753
STDMETHOD() AutoArrange() override
Definition: CDefView.cpp:3960
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:3139
STDMETHOD() AddPropertySheetPages(DWORD dwReserved, LPFNSVADDPROPSHEETPAGE pfn, LPARAM lparam) override
Definition: CDefView.cpp:3268
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
Definition: CDefView.cpp:4755
BOOLEAN LV_DeleteItem(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1403
STDMETHOD() GetItemObject(UINT uItem, REFIID riid, void **ppv) override
Definition: CDefView.cpp:3530
STDMETHOD() GetObjectCount(UINT *count) override
Definition: CDefView.cpp:4009
HRESULT _MergeToolbar()
Definition: CDefView.cpp:4762
STDMETHOD() SetCallback(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb) override
Definition: CDefView.cpp:4149
HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
Definition: CDefView.cpp:4283
void LV_RefreshItem(INT iItem)
Definition: CDefView.cpp:1496
DWORD m_dwAdvf
Definition: CDefView.cpp:262
HRESULT _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CDefView.cpp:4789
STDMETHOD() Items(UINT uFlags, REFIID riid, void **ppv) override
Definition: CDefView.cpp:3667
STDMETHOD() CreateViewWindow2(LPSV2CVW2_PARAMS view_params) override
Definition: CDefView.cpp:3810
STDMETHOD() SelectItem(PCUITEMID_CHILD pidlItem, SVSIF uFlags) override
Definition: CDefView.cpp:3474
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2418
STDMETHOD() GetAdvise(DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink) override
Definition: CDefView.cpp:4736
LRESULT OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1649
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:3451
CComPtr< IContextMenu > m_pCM
Definition: CDefView.cpp:274
CComPtr< IShellBrowser > m_pShellBrowser
Definition: CDefView.cpp:239
void _DoCopyToMoveToFolder(BOOL bCopy)
Definition: CDefView.cpp:2488
HRESULT GetDetailsByListColumn(PCUITEMID_CHILD pidl, UINT ListCol, SHELLDETAILS &sd)
Definition: CDefView.cpp:1076
INT _FindInsertableIndexFromPoint(POINT pt)
Definition: CDefView.cpp:4445
LRESULT OnPrintClient(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1712
LRESULT DoColumnContextMenu(LRESULT lParam)
Definition: CDefView.cpp:1999
UINT m_cScrollDelay
Definition: CDefView.cpp:269
LISTVIEW_SORT_INFO m_sortInfo
Definition: CDefView.cpp:258
void LV_RefreshItems()
Definition: CDefView.cpp:1508
CComPtr< IDataObject > m_pSourceDataObject
Definition: CDefView.cpp:265
HRESULT CheckViewMode(HMENU hmenuView)
Definition: CDefView.cpp:1986
CComPtr< IAdviseSink > m_pAdvSink
Definition: CDefView.cpp:263
void _HandleStatusBarResize(int width)
Definition: CDefView.cpp:4515
STDMETHOD() GetView(SHELLVIEWID *pVid, ULONG view_type) override
Definition: CDefView.cpp:3791
STDMETHOD() SetCurrentViewMode(UINT ViewMode) override
Definition: CDefView.cpp:3600
LRESULT OnInitMenuPopup(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3042
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:2368
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3023
ClipboardViewerChain m_ClipboardChain
Definition: CDefView.cpp:243
STDMETHOD() GetItemPosition(PCUITEMID_CHILD pidl, POINT *ppt) override
Definition: CDefView.cpp:3690
STDMETHOD() SetPoints(IDataObject *obj) override
Definition: CDefView.cpp:4137
STDMETHOD() IsDropOnSource(IDropTarget *drop_target) override
Definition: CDefView.cpp:4069
HRESULT FillList(BOOL IsRefreshCommand=TRUE)
Definition: CDefView.cpp:1539
CComPtr< IDropTarget > m_pCurDropTarget
Definition: CDefView.cpp:266
PIDLIST_ABSOLUTE m_pidlParent
Definition: CDefView.cpp:255
STDMETHOD() GetSelectionMarkedItem(int *piItem) override
Definition: CDefView.cpp:3672
STDMETHOD() TranslateAccelerator(MSG *pmsg) override
Definition: CDefView.cpp:3147
STDMETHOD() QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) override
Definition: CDefView.cpp:4681
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:4700
HMENU m_hContextMenu
Definition: CDefView.cpp:250
CComPtr< IShellFolderViewCB > m_pShellFolderViewCB
Definition: CDefView.cpp:238
STDMETHOD() GiveFeedback(DWORD dwEffect) override
Definition: CDefView.cpp:4693
STDMETHOD() ArrangeGrid() override
Definition: CDefView.cpp:3954
STDMETHOD() SetRedraw(BOOL redraw) override
Definition: CDefView.cpp:4034
void _ForceStatusBarResize()
Definition: CDefView.cpp:4541
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
LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2495
HRESULT InvokeContextMenuCommand(CComPtr< IContextMenu > &pCM, LPCSTR lpVerb, POINT *pt=NULL, bool TryMapVerb=false)
Definition: CDefView.cpp:2147
STDMETHOD() GetSelectedObjects(PCUITEMID_CHILD **pidl, UINT *items) override
Definition: CDefView.cpp:4048
HDPA m_ListToFolderColMap
Definition: CDefView.cpp:257
STDMETHOD() QuerySupport(UINT *support) override
Definition: CDefView.cpp:4167
void OnDeactivate()
Definition: CDefView.cpp:2443
LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1680
void _MoveSelectionOnAutoArrange(POINT pt)
Definition: CDefView.cpp:4569
static INT CALLBACK ListViewCompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData)
Definition: CDefView.cpp:1253
STDMETHOD() GetDefaultSpacing(POINT *ppt) override
Definition: CDefView.cpp:3728
CLSID m_Category
Definition: CDefView.cpp:283
HRESULT FillArrangeAsMenu(HMENU hmenuArrange)
Definition: CDefView.cpp:1930
signed char m_SpecialFolder
Definition: CDefView.cpp:278
STDMETHOD() UpdateObject(PITEMID_CHILD pidl_old, PITEMID_CHILD pidl_new, UINT *item) override
Definition: CDefView.cpp:4022
STDMETHOD() GetItemSpacing(ITEMSPACING *spacing) override
Definition: CDefView.cpp:4143
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:2533
HRESULT OpenSelectedItems(PCSTR pszVerb=NULL)
Definition: CDefView.cpp:2209
STDMETHOD() AddObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:3967
STDMETHOD() GetDropPoint(POINT *pt) override
Definition: CDefView.cpp:4089
HICON m_hMyComputerIcon
Definition: CDefView.cpp:287
STDMETHOD() GetSelectedCount(UINT *count) override
Definition: CDefView.cpp:4042
STDMETHOD() GetFocusedItem(int *piItem) override
Definition: CDefView.cpp:3681
LRESULT OnDrawClipboard(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:3108
STDMETHOD() GetSpacing(POINT *ppt) override
Definition: CDefView.cpp:3706
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1654
STDMETHOD() CreateViewWindow(IShellView *psvPrevious, LPCFOLDERSETTINGS pfs, IShellBrowser *psb, RECT *prcView, HWND *phWnd) override
Definition: CDefView.cpp:3204
FOLDERVIEWMODE GetDefaultViewMode()
Definition: CDefView.cpp:3580
STDMETHOD() GetDragPoint(POINT *pt) override
Definition: CDefView.cpp:4080
BOOL m_bmenuBarInitialized
Definition: CDefView.cpp:251
HRESULT MapFolderColumnToListColumn(UINT FoldCol)
Definition: CDefView.cpp:1020
SFGAOF GetSelectionAttributes(SFGAOF Query)
Definition: CDefView.cpp:2139
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:3634
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
Definition: CDefView.cpp:4200
UINT m_uState
Definition: CDefView.cpp:252
STDMETHOD() DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CDefView.cpp:4417
STDMETHOD() Rearrange(LPARAM sort) override
Definition: CDefView.cpp:3941
DWORD m_grfKeyState
Definition: CDefView.cpp:272
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
Definition: CDefView.cpp:4179
HRESULT _GetSnapToGrid()
Definition: CDefView.cpp:3738
HRESULT GetDefaultViewStream(DWORD Stgm, IStream **ppStream)
Definition: CDefView.cpp:3291
UINT GetSelections()
Definition: CDefView.cpp:2106
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:3256
CComPtr< ICommDlgBrowser > m_pCommDlgBrowser
Definition: CDefView.cpp:240
STDMETHOD() GetCurrentViewMode(UINT *pViewMode) override
Definition: CDefView.cpp:3589
POINT m_ptLastMousePos
Definition: CDefView.cpp:270
STDMETHOD() RefreshObject(PITEMID_CHILD pidl, UINT *item) override
Definition: CDefView.cpp:4028
BOOL InitList()
Definition: CDefView.cpp:981
ULONG m_hNotify
Definition: CDefView.cpp:259
STDMETHOD() IsBkDropTarget(IDropTarget *drop_target) override
Definition: CDefView.cpp:4107
HRESULT MapListColumnToFolderColumn(UINT ListCol)
Definition: CDefView.cpp:1033
STDMETHOD() Refresh() override
Definition: CDefView.cpp:3192
HRESULT LoadViewState()
Definition: CDefView.cpp:3316
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:3775
static bool IsSupportedFolderViewMode(int Mode)
Definition: CDefView.cpp:377
HRESULT OnDefaultCommand()
Definition: CDefView.cpp:688
STDMETHOD() SetClipboard(BOOL move) override
Definition: CDefView.cpp:4113
void UpdateFolderViewFlags()
Definition: CDefView.cpp:3459
HRESULT FillViewMenu()
Definition: CDefView.cpp:1914
LONG m_iDragOverItem
Definition: CDefView.cpp:268
STDMETHOD() ItemCount(UINT uFlags, int *pcItems) override
Definition: CDefView.cpp:3655
virtual VOID OnFinalMessage(HWND) override
Definition: CDefView.cpp:1760
LRESULT OnGetShellBrowser(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1748
STDMETHOD() MoveIcons(IDataObject *obj) override
Definition: CDefView.cpp:4095
STDMETHOD() GetWindow(HWND *lphwnd) override
Definition: CDefView.cpp:3130
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:3817
HMENU m_hMenuViewModes
Definition: CDefView.cpp:249
HACCEL m_hAccel
Definition: CDefView.cpp:260
STDMETHOD() GetArrangeParam(LPARAM *sort) override
Definition: CDefView.cpp:3947
LRESULT OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2908
virtual WNDPROC GetWindowProc() override
Definition: CDefView.cpp:530
STDMETHOD() Freeze(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DWORD *pdwFreeze) override
Definition: CDefView.cpp:4712
STDMETHOD() GetColorSet(DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **ppColorSet) override
Definition: CDefView.cpp:4706
STDMETHOD() HandleRename(LPCITEMIDLIST pidl) override
Definition: CDefView.cpp:3908
FOLDERSETTINGS m_FolderSettings
Definition: CDefView.cpp:246
STDMETHOD() DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CDefView.cpp:4398
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:4016
STDMETHOD() GetObject(PITEMID_CHILD *pidl, UINT item) override
Definition: CDefView.cpp:3979
void UpdateStatusbarLocation()
Definition: CDefView.cpp:812
LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:2642
STDMETHOD() EnableModeless(BOOL fEnable) override
Definition: CDefView.cpp:3163
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:4724
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: CDefView.cpp:1765
BOOL LV_UpdateItem(INT nItem, PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1459
STDMETHOD() UIActivate(UINT uState) override
Definition: CDefView.cpp:3169
int LV_FindItemByPidl(PCUITEMID_CHILD pidl)
Definition: CDefView.cpp:1345
STDMETHOD() Item(int iItemIndex, PITEMID_CHILD *ppidl) override
Definition: CDefView.cpp:3642
HRESULT SelectAndPositionItem(int Idx, UINT fSVSI, POINT *ppt)
Definition: CDefView.cpp:3922
HRESULT LoadColumns(SIZE_T *pColList=NULL, UINT ColListCount=0)
Definition: CDefView.cpp:1122
void DoActivate(UINT uState)
Definition: CDefView.cpp:2454
STDMETHOD() Select(UINT flags) override
Definition: CDefView.cpp:4161
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
HRESULT hr
Definition: delayimp.cpp:582
#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
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
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:4171
static struct @471 sort
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1250
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
#define assert(_expr)
Definition: assert.h:32
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
#define UINT_MAX
Definition: limits.h:27
#define true
Definition: stdbool.h:24
#define false
Definition: stdbool.h:25
HRESULT WINAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget)
Definition: ole2.c:547
HRESULT WINAPI DoDragDrop(IDataObject *pDataObject, IDropSource *pDropSource, DWORD dwOKEffect, DWORD *pdwEffect)
Definition: ole2.c:737
HRESULT WINAPI RevokeDragDrop(HWND hwnd)
Definition: ole2.c:629
HRESULT WINAPI IUnknown_QueryService(IUnknown *obj, REFGUID sid, REFIID iid, void **out)
Definition: main.c:181
BOOL WINAPI IsOS(DWORD feature)
Definition: main.c:2392
DWORD WINAPI SHGetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len)
Definition: main.c:2222
DWORD WINAPI SHAnsiToUnicode(const char *src, WCHAR *dest, int dest_len)
Definition: main.c:1801
IStream *WINAPI SHCreateMemStream(const BYTE *data, UINT data_len)
Definition: main.c:873
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
Definition: main.c:1756
IStream *WINAPI SHOpenRegStream2W(HKEY hKey, const WCHAR *subkey, const WCHAR *value, DWORD mode)
Definition: main.c:1266
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: main.c:222
BOOL SHELL_FS_HideExtension(LPCWSTR szPath)
Definition: CFSFolder.cpp:1444
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:496
#define SHV_UPDATESTATUSBAR
Definition: precomp.h:140
EXTERN_C HRESULT WINAPI SHGetRealIDL(_In_ IShellFolder *psf, _In_ PCUITEMID_CHILD pidlSimple, _Outptr_ PITEMID_CHILD *ppidlReal)
Definition: utils.cpp:1691
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
#define EnableModeless(type)
Definition: ordinal.c:3084
DWORD WINAPI SHFillRectClr(HDC hDC, LPCRECT pRect, COLORREF cRef)
Definition: ordinal.c:1728
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1071
DWORD WINAPI SHMenuIndexFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:3951
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:854
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
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_(Height *Stride) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Stride)
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:147
#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
unsigned int UINT
Definition: sysinfo.c:13
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:826
@ SV3CVW3_FORCEVIEWMODE
Definition: shobjidl.idl:871
@ SV3CVW3_FORCEFOLDERFLAGS
Definition: shobjidl.idl:872
DWORD SV3CVW3_FLAGS
Definition: shobjidl.idl:875
@ SVUIA_DEACTIVATE
Definition: shobjidl.idl:784
@ SVUIA_ACTIVATE_FOCUS
Definition: shobjidl.idl:786
@ SVUIA_ACTIVATE_NOFOCUS
Definition: shobjidl.idl:785
UINT SVSIF
Definition: shobjidl.idl:770
@ SVGIO_SELECTION
Definition: shobjidl.idl:775
@ SVGIO_BACKGROUND
Definition: shobjidl.idl:774
@ SVGIO_TYPE_MASK
Definition: shobjidl.idl:778
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 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
#define menu
Definition: input.c:3282
static HMENU hmenu
Definition: win.c:78
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM ULONG int * pcItems
Definition: usp10.c:62
WORD unused[29]
Definition: crypt.c:1298
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
_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
#define STGM_WRITE
Definition: objbase.h:937
#define STGM_READ
Definition: objbase.h:936
#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
short WCHAR
Definition: pedump.c:58
#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
char CHAR
Definition: pedump.c:57
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:2128
BOOL _ILIsFolder(LPCITEMIDLIST pidl)
Definition: pidl.c:2146
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
Definition: pidl.c:941
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1496
DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize)
Definition: pidl.c:2521
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:1957
EXTERN_C HRESULT WINAPI IUnknown_QueryServicePropertyBag(_In_ IUnknown *punk, _In_ long flags, _In_ REFIID riid, _Outptr_ void **ppvObj)
Definition: propbag.cpp:1986
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
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#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
#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
#define LoadStringW
Definition: utils.h:64
static HWND hEdit
Definition: autocomplete.c:34
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
HRESULT WINAPI SHLimitInputEdit(HWND hWnd, IShellFolder *psf)
Definition: shellord.c:3134
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:738
#define SHELL_ErrorBox
Definition: shellutils.h:126
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:630
#define SHCNE_DRIVEREMOVED
Definition: shlobj.h:1914
#define SFVM_UPDATINGOBJECT
Definition: shlobj.h:1349
#define SHCNE_RMDIR
Definition: shlobj.h:1911
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1334
#define SHCNE_DELETE
Definition: shlobj.h:1909
#define SHCNE_MKDIR
Definition: shlobj.h:1910
#define SFVM_WINDOWCREATED
Definition: shlobj.h:1324
#define SHCNE_UPDATEITEM
Definition: shlobj.h:1920
#define SHCNE_RENAMEITEM
Definition: shlobj.h:1907
#define SSF_DOUBLECLICKINWEBVIEW
Definition: shlobj.h:1627
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1919
#define SHCNE_MEDIAINSERTED
Definition: shlobj.h:1912
#define SHCNE_UPDATEIMAGE
Definition: shlobj.h:1922
#define SFVM_SIZE
Definition: shlobj.h:1355
#define SSF_WIN95CLASSIC
Definition: shlobj.h:1630
#define SHCNE_CREATE
Definition: shlobj.h:1908
#define FCIDM_MENU_VIEW_SEP_OPTIONS
Definition: shlobj.h:640
#define SHCNE_RENAMEFOLDER
Definition: shlobj.h:1924
#define SHCNRF_NewDelivery
Definition: shlobj.h:1956
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2547
#define MM_DONTREMOVESEPS
Definition: shlobj.h:2548
#define SHCNRF_ShellLevel
Definition: shlobj.h:1954
#define SHCNE_MEDIAREMOVED
Definition: shlobj.h:1913
#define FCIDM_MENU_FILE
Definition: shlobj.h:637
#define SHCNE_EXTENDED_EVENT
Definition: shlobj.h:1927
#define SHCNE_DRIVEADD
Definition: shlobj.h:1915
#define SHCNE_ASSOCCHANGED
Definition: shlobj.h:1928
#define CSIDL_DESKTOP
Definition: shlobj.h:2191
#define CSIDL_NETWORK
Definition: shlobj.h:2208
#define SFVM_COLUMNCLICK
Definition: shlobj.h:1331
#define SFVM_ADDPROPERTYPAGES
Definition: shlobj.h:1351
#define FCIDM_SHVIEWFIRST
Definition: shlobj.h:590
#define FCIDM_MENU_VIEW
Definition: shlobj.h:639
#define SHCNRF_InterruptLevel
Definition: shlobj.h:1953
#define SHCNE_ATTRIBUTES
Definition: shlobj.h:1918
#define SHCNE_ALLEVENTS
Definition: shlobj.h:1931
#define MM_ADDSEPARATOR
Definition: shlobj.h:2546
#define SSF_SHOWSUPERHIDDEN
Definition: shlobj.h:1638
#define SFVM_HWNDMAIN
Definition: shlobj.h:1350
#define SHCNE_FREESPACE
Definition: shlobj.h:1925
#define SFVM_FSNOTIFY
Definition: shlobj.h:1323
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1621
#define FCIDM_MENU_EDIT
Definition: shlobj.h:638
@ REST_NOVIEWCONTEXTMENU
Definition: shlobj.h:1686
#define SFVM_QUERYFSNOTIFY
Definition: shlobj.h:1332
#define SFVM_GETNOTIFY
Definition: shlobj.h:1353
#define CSIDL_BITBUCKET
Definition: shlobj.h:2201
#define FCIDM_SHVIEWLAST
Definition: shlobj.h:621
#define FCIDM_SHVIEW_DESELECTALL
Definition: shlobj_undoc.h:86
#define DVCMDID_SET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:136
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:137
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:672
@ FWF_SNAPTOGRID
Definition: shobjidl.idl:675
@ FWF_AUTOARRANGE
Definition: shobjidl.idl:673
@ FWF_NOGROUPING
Definition: shobjidl.idl:693
@ FWF_ALIGNLEFT
Definition: shobjidl.idl:684
@ FWF_NOSCROLL
Definition: shobjidl.idl:683
@ FWF_NOHEADERINALLVIEWS
Definition: shobjidl.idl:697
@ FWF_SINGLECLICKACTIVATE
Definition: shobjidl.idl:688
@ FWF_OWNERDATA
Definition: shobjidl.idl:676
@ FWF_FULLROWSELECT
Definition: shobjidl.idl:694
@ FWF_NOBROWSERVIEWSTATE
Definition: shobjidl.idl:701
@ FWF_NOCLIENTEDGE
Definition: shobjidl.idl:682
@ FWF_TRANSPARENT
Definition: shobjidl.idl:681
@ FWF_SINGLESEL
Definition: shobjidl.idl:679
@ FWF_NOCOLUMNHEADER
Definition: shobjidl.idl:696
@ FWF_DESKTOP
Definition: shobjidl.idl:678
@ FWF_NOSUBFOLDERS
Definition: shobjidl.idl:680
LPARAM LPFNSVADDPROPSHEETPAGE
Definition: shobjidl.idl:117
FOLDERVIEWMODE
Definition: shobjidl.idl:708
@ FVM_SMALLICON
Definition: shobjidl.idl:712
@ FVM_AUTO
Definition: shobjidl.idl:709
@ FVM_LIST
Definition: shobjidl.idl:713
@ FVM_LAST
Definition: shobjidl.idl:719
@ FVM_ICON
Definition: shobjidl.idl:710
@ FVM_DETAILS
Definition: shobjidl.idl:714
@ FVM_FIRST
Definition: shobjidl.idl:711
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:835
SHELLVIEWID const * pvid
Definition: shobjidl.idl:838
IShellBrowser * psbOwner
Definition: shobjidl.idl:836
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:1573
BOOL fShowAllObjects
Definition: shlobj.h:1557
Definition: dpa.c:49
Definition: scsiwmi.h:51
IShellFolderViewCB * psfvcb
Definition: shlobj.h:1376
IShellView * psvOuter
Definition: shlobj.h:1375
UINT cbSize
Definition: shlobj.h:1373
IShellFolder * pshf
Definition: shlobj.h:1374
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1903
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
LONG bmHeight
Definition: wingdi.h:1869
LONG bmWidth
Definition: wingdi.h:1868
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:3376
LPWSTR dwTypeData
Definition: winuser.h:3377
UINT message
Definition: winuser.h:3223
WPARAM wParam
Definition: winuser.h:3224
UINT code
Definition: winuser.h:3267
HWND hwndFrom
Definition: winuser.h:3265
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
const char * LPCSTR
Definition: typedefs.h:52
int32_t INT_PTR
Definition: typedefs.h:64
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
unsigned char * LPBYTE
Definition: typedefs.h:53
uint16_t * LPWSTR
Definition: typedefs.h:56
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:286
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:2341
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:1887
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:6009
#define LoadCursor
Definition: winuser.h:5978
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5885
#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:5998
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:6023
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:3014
#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:6026
#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:2444
#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)