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